Servidor MCP

BotKelp

io.github.aiscimi-code/botkelp

Qué hace este MCP

Provides verified Next.js component source and purchasable project scaffolds, with GitHub integration, build verification, project maintenance, and integrity-oriented workflows.

get_account_status
Get account status
Reports whether your authenticated account has a BotKelp account_api_key linked (yes/no) and when it was last linked/rotated. Never returns the key itself. Use this to check whether key-gated tools will work before calling them. Takes no parameters — your identity comes from the MCP transport, not the call.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_adminpageset
Get admin page set
Lists this account's admin page set names (omit name), or returns one set's exact files (pass name). These are the file trees purchase_scaffold's admin_page_set param bakes into a dedicated forked repo. Requires account_api_key.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'name': {'type': 'string', 'description': "The set to fetch. Omit to list this account's set names instead."}}}
get_component
Get component source
Returns the exact, unrendered source files for one catalog component — the same files a purchased scaffold would include for it. Use this to inspect or compare a component before buying a scaffold. Free, but rate-limited to 32 calls/day per account. Requires a registered account key (no credits are spent). IMPORTANT: files contain raw EJS template markers (e.g. <%= projectName %>, <% ... %>) and are NOT build-ready. Do not copy get_component output directly into a project. Use purchase_scaffold or generate_scaffold for rendered, build-ready files.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['component'], 'properties': {'component': {'type': 'string', 'description': 'Component id, or id@version, e.g. "supabase-client@2.0.0".'}}}
get_github
Get GitHub connection
Shows whether this account has a GitHub repo connected, or lists files under a path in that repo. If not connected, the result includes installUrl — open it (GitHub App) to grant read access to one repo. Sign in on botkelp.com with GitHub first so the install is tied to your account.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'path': {'type': 'string', 'description': 'Folder or file in the connected repo to list. Omit for connection status.'}}}
get_help
Get help
Free, no API key. Usage + full component catalog as TSV (id, name, version, description, provides, requires, conflictsWith). Call this first. Prefer resource botkelp://catalog if your client supports it.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_projects
Get projects
Lists this account's saved scaffold projects (id, name, description, repo, components, maintain state). Use the projectid with get_scaffold to re-fetch a scaffold — no project_api_key is needed as a tool argument.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_scaffold
Get scaffold
Re-fetches a scaffold you already purchased via purchase_scaffold: a fresh clone credential and the current component versions, at no additional credit cost. Identify the project with projectid (resolved from your authenticated account). For a credit-flow project, this always requires an active Maintain subscription on it (see set_projects) — repos are shared by component combination, so this is always a repeat hand-off. An x402 (accountless) project has no Maintain gate. Pass site_profile the same way as purchase_scaffold to attach a named profile's documents in the same result. delivery: "clone" (default) returns a git clone command; "inline" returns the files in the reply instead, for callers that can't run git — costs more tokens.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectid'], 'properties': {'delivery': {'enum': ['clone', 'inline'], 'type': 'string', 'description': '"clone" (default): git clone command. "inline": files in the reply. No git needed. More tokens.'}, 'projectid': {'type': 'string', 'description': 'The project id from a previous purchase_scaffold result. Required â\x80\x94 your project is resolved from your authenticated account.'}, 'site_profile': {'type': ['boolean', 'string'], 'description': "false/omit: skip. true: attach this account's one site profile (errors if 0 or >1). A string: attach that named profile."}}}
get_siteprofile
Get site profile
Returns one or all of this account's named site profiles (privacy, terms, cookies, licence, custom_field) as JSON bodies + destination paths — not as files in a template repo. Pass list: true to see profile names, or siteprofilename to fetch one. field filters to specific categories (default: all). If the previous purchase_scaffold/get_scaffold result set incomplete: true, call this with next.arguments. There is no second unsolicited reply. Requires account_api_key.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'list': {'type': 'boolean', 'description': "If true, return this account's profile names instead of a profile's content."}, 'field': {'anyOf': [{'type': 'string', 'const': 'all'}, {'type': 'array', 'items': {'enum': ['privacy', 'terms', 'cookies', 'license', 'custom_field'], 'type': 'string'}}], 'description': '"all" (default), or an array from: privacy, terms, cookies, license, custom_field.'}, 'cursor': {'type': 'string', 'description': 'Resume token from a previous incomplete result, e.g. "doc:terms".'}, 'siteprofilename': {'type': 'string', 'description': 'The profile to fetch. Required unless list: true.'}}}
purchase_scaffold
Purchase scaffold
Requests a build for the given component ids, backed by a private GitHub repo BotKelp owns and manages itself under its own org — never your account. Returns the repo's location, a short-lived single-repo-scoped clone credential, and a persistent projectid for later use with get_scaffold/get_projects/set_projects. Repeat requests for the same component combination reuse the same repo at no extra GitHub-side cost. A failed build (red ci.yml) is never charged. Payment: provide account_api_key to pay with account credits (requires sufficient balance), or omit it entirely to pay per-call in USDC via the x402 protocol (attach payment via the MCP call's _meta["x402/payment"] — no signup, no tool argument for this). maintain (default true, credit flow only) keeps this project's repeat access renewable — see ADR 0025 and set_projects. Pass site_profile: true (only your account's single profile) or a profile name to attach that named profile's documents in the same result; if incomplete, call get_siteprofile with next.arguments — there is no second unsolicited reply. delivery: "clone" (default) returns a git clone command; "inline" returns the files in the reply instead, for callers that can't run git — costs more tokens, use only when a shell isn't available. Extra pages land IN the clone (unique personal bk-* repo; shared tpl stays generic): site_profile true or a name bakes dashboard legal pages (privacy/terms/cookies) as Next.js routes; template_files true (all saved files) or [{name} | {source, dest}] pulls dashboard files or files from the connected GitHub repo.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['components'], 'properties': {'project': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Name used for the project and in package.json.'}, 'description': {'type': 'string', 'description': 'Free-text description saved with the project.'}}, 'description': 'Project metadata to save alongside the purchased scaffold.'}, 'delivery': {'enum': ['clone', 'inline'], 'type': 'string', 'description': '"clone" (default): git clone command. "inline": files in the reply. No git needed. More tokens.'}, 'maintain': {'type': 'boolean', 'description': 'Keep repeat access to this repo renewable. Defaults to true. Ignored for x402 (accountless) purchases.'}, 'components': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Component ids to include, e.g. ["nextjs-base", "tailwind", "supabase-client"].'}, 'site_profile': {'type': ['boolean', 'string'], 'description': "false/omit: skip. true: bake this account's one site profile into the clone (errors if 0 or >1). A string: bake that named profile (privacy, terms, cookies, â\x80¦)."}, 'admin_page_set': {'type': 'string', 'description': 'Optional extra file-tree name (same overlay as template_files). Prefer site_profile / template_files.'}, 'template_files': {'anyOf': [{'type': 'boolean', 'const': True}, {'type': 'array', 'items': {'type': 'object', 'properties': {'dest': {'type': 'string', 'description': "Destination in the generated project. Defaults to the file's stored path / source path."}, 'name': {'type': 'string', 'description': 'Saved dashboard template file name.'}, 'source': {'type': 'string', 'description': 'Path in the connected GitHub repo, e.g. "legal/gdpr.md" or "app/rules/page.tsx".'}}}}], 'description': 'true: every saved dashboard template file. Or a list of {name} and/or {source, dest} from the connected GitHub repo.'}}}
report_issue
Report an issue
File a GitHub issue on https://github.com/botkelp/components/issues about generated or catalog code, or request a new component/docs change. Welcome — we want agents to report problems instead of silently papering over them. Requires account_api_key (spam guard), rate-limited to 10 calls/day per account. projectid is optional context. Never include API keys or secrets in description.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['description'], 'properties': {'projectid': {'type': 'string', 'description': 'Optional project id this report relates to.'}, 'description': {'type': 'string', 'description': 'What is wrong or what you want. Include enough detail to reproduce. No secrets.'}}}
set_adminpageset
Set admin page set
Creates or fully replaces one named admin page set for this account — real file source (React/Next.js), not text config. purchase_scaffold's admin_page_set param bakes a chosen set into a brand-new, dedicated repo. An account may keep more than one named set.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'files'], 'properties': {'name': {'type': 'string', 'description': 'Name for this set, e.g. "default" or "acme-admin".'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'description': 'Relative file path, e.g. "app/layout.tsx".'}, 'content': {'type': 'string'}}}, 'minItems': 1, 'description': 'The full set of files, e.g. [{ path: "app/admin/page.tsx", content: "..." }].'}}}
set_github
Connect or disconnect GitHub
Returns a GitHub App install URL so the user can grant BotKelp read access to one of their repos. Open the URL, pick a single repo, approve. Then purchase_scaffold template_files: [{ source: "app/legal/" }] copies those pages into the clone. disconnect: true drops the connection. Prefer signing in with GitHub on botkelp.com first.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'disconnect': {'type': 'boolean', 'description': 'true: drop the connected repo. Omit to mint a fresh install URL.'}}}
set_projects
Set projects
Turns Maintain on/off for one of this account's projects and/or rotates its project key. Identify the project with projectid (scoped to your authenticated account). Turning maintain off does not delete or revoke anything already cloned; it stops future repeat get_scaffold access after the current Maintain billing period.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectid'], 'properties': {'rotate': {'type': 'boolean', 'description': 'If true, mints a new project key and invalidates the old one.'}, 'maintain': {'type': 'boolean'}, 'projectid': {'type': 'string', 'description': 'The project id to change (from get_projects). Required â\x80\x94 scoped to your authenticated account.'}}}
set_siteprofile
Set site profile
Creates or updates one named site profile for this account. Fields omitted from `field` keep their current saved value (or blank, if the profile is new); pass only what changed. custom_field entries are merged key-by-key. An account may keep more than one named profile (e.g. one per brand/site).
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['siteprofilename', 'field'], 'properties': {'field': {'type': 'object', 'properties': {'terms': {'type': 'string'}, 'cookies': {'type': 'string'}, 'license': {'type': 'string'}, 'privacy': {'type': 'string'}, 'custom_field': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Fields to change. Omitted fields keep their current value.'}, 'siteprofilename': {'type': 'string', 'description': 'Name for this profile, e.g. "default" or "acme-co".'}}}
verify_scaffold
Verify scaffold
Runs a real `npm install && npm run build` against the given files on an isolated GitHub Actions runner and reports whether the project builds. Two-call protocol: pass files to start (returns WAIT + a jobId), then call again with that jobId to get the verdict (OK or FAIL). A full install and build usually takes one to two minutes. Requires the projectid of a project this account purchased via purchase_scaffold — attributes every build to a real customer. Use this after editing a get_scaffold result to check the edited project still builds, before handing it to the user. Send the full project — every file, not just the ones you changed. On FAIL, the response includes the tail of the failing step output (compiler/install errors). Fix the files and retry.
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['projectid'], 'properties': {'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'description': 'Relative file path, e.g. "app/layout.tsx".'}, 'content': {'type': 'string'}}}, 'minItems': 1, 'description': "The full project to verify â\x80\x94 a scaffold's files with your edits applied. Omit when polling with jobId."}, 'jobId': {'type': 'string', 'description': 'Poll a previously started verification. Omit on the first call (pass files), pass the returned jobId on subsequent calls.'}, 'projectid': {'type': 'string', 'description': 'The project id from a previous purchase_scaffold result â\x80\x94 must be owned by this account. Required.'}, 'envVariables': {'type': 'array', 'items': {'type': 'string'}, 'description': "Env var names to write placeholder values for before building (typically get_component's `envVariables` output) â\x80\x94 needed for components that read process.env at build time (e.g. a Supabase client)."}}}
Añadido
get_account_status
17 de September de 2026 a las 12:40
Añadido
set_github
17 de September de 2026 a las 12:40
Añadido
get_github
17 de September de 2026 a las 12:40
Añadido
report_issue
17 de September de 2026 a las 12:40
Añadido
verify_scaffold
17 de September de 2026 a las 12:40
Añadido
set_adminpageset
17 de September de 2026 a las 12:40
Añadido
get_adminpageset
17 de September de 2026 a las 12:40
Añadido
set_siteprofile
17 de September de 2026 a las 12:40
Añadido
get_siteprofile
17 de September de 2026 a las 12:40
Añadido
set_projects
17 de September de 2026 a las 12:40
Añadido
get_projects
17 de September de 2026 a las 12:40
Añadido
get_scaffold
17 de September de 2026 a las 12:40
Añadido
purchase_scaffold
17 de September de 2026 a las 12:40
Añadido
get_component
17 de September de 2026 a las 12:40
Añadido
get_help
17 de September de 2026 a las 12:40