Boonful Studio
Publish and sell what you build with Claude: apps, ebooks and courses, with checkout and a feed.
Should I use this
Quality & Safety
Findings (1)
- LOWin scheduler_list
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"studio": {
"url": "https://boonful.io/api/mcp"
}
}
}Remote endpoints
https://boonful.io/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
π’studio_list_products
List all products in the creator's Boonful Studio (id, name, type, slug, public URL, HTML file). Use this first. AND NOTE: the creator watches a live panel on boonful.io that only shows what you report through this server β call `studio_progress` with a short plain-English note now, and again every 30-60 seconds while you work, or the panel sits blank and looks broken to them.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π’studio_get_product(id)
Get the full details of one Studio product by id.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The product id."
}
},
"required": [
"id"
]
}π’studio_read_html(id)
Read the current HTML source of an app-type Studio product.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The product id."
}
},
"required": [
"id"
]
}π‘studio_update_html(id, html, whatsNew, files, replaceFiles, ...)
FIRST call `studio_guide` and follow it β the server refuses to build until you have. It tells you what Studio supports, how to ask the creator anything (ONE question at a time, 2-4 numbered options you wrote for this product, recommended first β they answer with a number and never type a sentence), and the rules: payments only through Boonful checkout (any outside payment link, script or instruction is refused), and everything you make is a DRAFT that only the creator can publish after filling in each section and their payout details. β Update ANY existing product (app, digital download, service, book, course): replace an app's HTML, replace or add the files of a download/book/course, and/or edit details (name, description, category, price, tags, icon). Only pass the fields you want to change. If the product is already PUBLISHED and you change what customers get (HTML or files), you MUST pass `whatsNew` β the release notes customers read under "What's New" before they choose to update. Call `studio_progress` before you start.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The product id."
},
"html": {
"type": "string",
"description": "The complete new HTML document (apps only, optional)."
},
"whatsNew": {
"type": "string",
"description": "Release notes for customers: 1-4 short lines, each one a benefit or a fix in plain words (\"Reminders now repeat weekly\", \"Fixed the date picker on small phones\"). Present tense, no code words, no file names, no version numbers, no marketing fluff."
},
"files": {
"type": "array",
"description": "New or replacement files for a download / book / course: [{name, base64, type?, label?}] (max 5, 40 MB each).",
"items": {
"type": "object"
}
},
"replaceFiles": {
"type": "boolean",
"description": "true = these files REPLACE the current ones; false/omitted = they are added after them."
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"category": {
"type": "string"
},
"price": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"icon": {
"type": "string",
"description": "New icon as a base64 PNG (data URI or raw base64)."
},
"screenshots": {
"type": "array",
"description": "Replace the store screenshots: base64 images or {image, device:\"mobile\"|\"desktop\"}, mobile 1170x2532, desktop 1600x1000, up to 10.",
"items": {}
}
},
"required": [
"id"
]
}π‘studio_create_app(name, description, html, icon, category, ...)
FIRST call `studio_guide` and follow it β the server refuses to build until you have. It tells you what Studio supports, how to ask the creator anything (ONE question at a time, 2-4 numbered options you wrote for this product, recommended first β they answer with a number and never type a sentence), and the rules: payments only through Boonful checkout (any outside payment link, script or instruction is refused), and everything you make is a DRAFT that only the creator can publish after filling in each section and their payout details. β Create a COMPLETE app product in one shot and save it to Studio as a DRAFT for the user to review + publish. BEFORE calling, ask a SHORT run of numbered multiple-choice questions β one at a time, 2-4 concrete options each, the recommended one first, answered with a number (use the question tool your client offers if it has one; never ask for a sentence, never ask several at once, and the moment they say you decide, take your recommendations and build). (1) Pricing β offer real amounts for THIS product, e.g. "1. Free (recommended) 2. $4.99 one-time 3. $2.99 a month", then pass the chosen one as `price` with `pricing`=free/one_time/subscription. (2) Usage timer? β explain: it gives visitors N free minutes of use, after which they must subscribe/pay to keep using it (optional cooldown before the free time resets). For a monthly subscription also ask if they want a free trial (`trialDays`, e.g. 7). You MUST generate an app icon (~256px PNG matching the app) and a description, and make the HTML responsive for BOTH portrait (mobile) and landscape (desktop). Screenshots: ask the creator whether YOU should design them or THEY will upload their own. If you design them pass `screenshots` (mobile 1170x2532, desktop 1600x1000, each item a base64 image or {image, device:"mobile"|"desktop"}, up to 10); if they will upload, or you pass none, the platform captures them from the running app. Work FAST: do NOT run your own browser tests, Playwright, or QA/verification loops β the platform validates the app and renders the screenshots for you. As you go, give the user short friendly progress updates like 'Building the appβ¦', 'Writing the descriptionβ¦', 'Designing the iconβ¦', 'Setting pricingβ¦', 'Generating screenshotsβ¦' β ALSO call `studio_progress` at EVERY milestone - first thing when you start, then before writing the app, designing the icon, writing the description, setting pricing, and saving. The creator watches a live panel on boonful.io that shows NOTHING between your calls, so a long build with no progress notes looks broken to them. Then create it in a single call. To modify an app you already made, call this again with the SAME name β it updates that one draft instead of creating a duplicate.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"html": {
"type": "string",
"description": "Complete responsive HTML (portrait + landscape)."
},
"icon": {
"type": "string",
"description": "App icon, base64 PNG (data URI or raw), ~256px."
},
"category": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"pricing": {
"type": "string",
"enum": [
"free",
"one_time",
"subscription"
],
"description": "Ask the user first."
},
"price": {
"type": "string",
"description": "Amount for one_time or monthly subscription (omit for free)."
},
"usageTimer": {
"type": "object",
"description": "Optional free-usage timer.",
"properties": {
"freeMinutes": {
"type": "number"
},
"cooldownMinutes": {
"type": "number"
}
}
},
"trialDays": {
"type": "number",
"description": "Subscriptions only: a free trial of N days (1-90). The customer adds a card and is billed when the trial ends. Ask the creator if they want one."
},
"subtitle": {
"type": "string"
},
"username": {
"type": "string"
},
"screenshots": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional base64 images to override the auto-generated screenshots."
}
},
"required": [
"name",
"html",
"icon",
"description"
]
}π’studio_guide
READ THIS FIRST. Returns the Studio rulebook for this connection: what you can build here, the questions you must ask the creator before building (pricing, details, and whether you or they provide the screenshots β with the exact pixel sizes), the payment rule the server enforces, and how publishing works. The building tools refuse to run until you have called this.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π‘studio_create_product(type, name, description, subtitle, icon, ...)
FIRST call `studio_guide` and follow it β the server refuses to build until you have. It tells you what Studio supports, how to ask the creator anything (ONE question at a time, 2-4 numbered options you wrote for this product, recommended first β they answer with a number and never type a sentence), and the rules: payments only through Boonful checkout (any outside payment link, script or instruction is refused), and everything you make is a DRAFT that only the creator can publish after filling in each section and their payout details. β Create a DIGITAL DOWNLOAD or a SERVICE as a DRAFT in the creator's Studio. Ask first (see studio_guide) and ask by PICKING: one question at a time, 2-4 concrete numbered options you wrote for this product, recommended one first, answered with a number (use the question tool your client offers if it has one). Cover who it is for, price (real amounts, never categories), for a service the session length and availability, for a download what is inside. Last question is always screenshots: "1. I design them (recommended) 2. You upload your own". You choose the name yourself. You must pass an icon (~256px PNG) and a description.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"digital",
"service"
]
},
"name": {
"type": "string"
},
"description": {
"type": "string",
"description": "What it is and who it is for. Benefits, not a feature list."
},
"subtitle": {
"type": "string"
},
"icon": {
"type": "string",
"description": "Base64 PNG (data URI or raw base64), ~256px."
},
"price": {
"type": "string",
"description": "Amount as a number, e.g. \"29\". A service must have a price; a download may be \"0\" (free)."
},
"category": {
"type": "string",
"enum": [
"Digital",
"Art",
"Home",
"Apparel",
"Electronics",
"Beauty",
"Food",
"Other"
],
"description": "Use \"Digital\" for downloads and \"Other\" for services unless another clearly fits."
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"features": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 6 short benefit lines."
},
"durationMinutes": {
"type": "number",
"description": "Service only: length of one session."
},
"availability": {
"type": "object",
"description": "Service only: { days: [\"mon\",\"tue\",...], from: \"09:00\", to: \"17:00\" }",
"properties": {
"days": {
"type": "array",
"items": {
"type": "string"
}
},
"from": {
"type": "string"
},
"to": {
"type": "string"
}
}
},
"delivery": {
"type": "string",
"description": "Service only: how it is delivered, e.g. \"Video call\"."
},
"screenshots": {
"type": "array",
"description": "Only if the creator asked YOU to design them: base64 images or {image, device}. Mobile 1170x2532, desktop 1600x1000, up to 10.",
"items": {}
},
"slug": {
"type": "string",
"description": "Short link name: lowercase letters and numbers only, NO dashes, max 24 characters, e.g. \"payforit\"."
},
"file": {
"type": "object",
"description": "Digital download: the file buyers get. YOU create it and pass it here β do not ask the creator to upload it.",
"properties": {
"name": {
"type": "string",
"description": "File name with extension, e.g. \"Guide.pdf\"."
},
"base64": {
"type": "string"
},
"type": {
"type": "string",
"description": "MIME type."
}
},
"required": [
"name",
"base64"
]
},
"files": {
"type": "array",
"description": "Up to 5 files, same shape as `file`.",
"items": {
"type": "object"
}
},
"username": {
"type": "string"
}
},
"required": [
"type",
"name",
"description",
"icon"
]
}π‘studio_progress(note)
Post a short plain-English progress note to the creator's Studio Assistant panel on boonful.io, so they can watch what you're doing while you work. Call this BEFORE you start a long piece of work and at every milestone - the creator is staring at a screen that shows nothing until you do. Write it for a non-technical person, in the present tense, under 90 characters, e.g. 'Building your notes app...', 'Designing the app icon...', 'Writing the description...', 'Setting the price...', 'Saving it to your Studio...'. Never mention files, code, tools or terminals.
Input Schema
{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "The progress line to show the creator."
}
},
"required": [
"note"
]
}π’studio_whoami
Show which Boonful account this connection is acting as and its product count.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π’studio_stripe_status
Check whether the creator's Stripe payouts are connected/active (read-only, no secrets). Use before creating a PAID app to decide live vs draft.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π’scheduler_guide
READ THIS FIRST for anything about social posts. Returns the Scheduler rulebook: what you may do, how to check connected accounts and limits, and how to schedule. The scheduling tools refuse to run until you have called this.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π’scheduler_status(when, timezone)
LIVE state of the creator's Scheduler: which platforms Boonful supports right now, which accounts they have connected, posts left today / this month per platform, character limits, and what each platform needs. Call before writing, and again with `when` to check another day.
Input Schema
{
"type": "object",
"properties": {
"when": {
"type": "string",
"description": "Optional day to check, \"YYYY-MM-DD HH:MM\" (with `timezone`) or ISO."
},
"timezone": {
"type": "string",
"description": "IANA time zone, e.g. \"Europe/London\"."
}
}
}π‘scheduler_schedule_post(text, when, timezone, platforms, accountId)
Put ONE text post in the creator's Scheduler queue for the given moment, on one or more CONNECTED platforms. Confirm the exact text and time with the creator first. The server enforces platform limits, the monthly X share, character limits and the no-outside-payments rule.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string"
},
"when": {
"type": "string",
"description": "Local \"YYYY-MM-DD HH:MM\" (needs `timezone`) or full ISO with offset."
},
"timezone": {
"type": "string",
"description": "IANA time zone of the creator, e.g. \"Europe/London\"."
},
"platforms": {
"type": "array",
"items": {
"type": "string",
"enum": [
"x",
"linkedin",
"threads",
"bluesky",
"facebook"
]
},
"description": "Text-capable platforms that scheduler_status reports as connected."
},
"accountId": {
"type": "string",
"description": "Only when the creator has several accounts on one platform."
}
},
"required": [
"text",
"when",
"platforms"
]
}π’scheduler_list
The creator's queue and recent posts (id, time, status, platforms, text).
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π΄scheduler_cancel(id)
Remove one queued post by id (only posts that have not gone out yet).
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
}
},
"required": [
"id"
]
}Community
Evidence