Verified component catalog over remote MCP: agents pick ids and get a project that builds.
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.
No params. Says whether you are signed in (authenticated) and account tools work (accountToolsReady). Never returns a key.
This tool takes no arguments.
No params. Says whether you are signed in (authenticated) and account tools work (accountToolsReady). Never returns a key.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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 a linked account (transport auth).
| Argument | Type | Description |
|---|---|---|
| name | string | The set to fetch. Omit to list this account's set names instead. |
{
"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."
}
}
}One component's source files, UNRENDERED (EJS markers, not build-ready): inspect only; use purchase_scaffold for real files. Free, 32/day, signed-in account.
| Argument | Type | Description |
|---|---|---|
| component* | string | Component id, or id@version, e.g. "[email protected]". |
{
"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. \"[email protected]\"."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| path | string | Folder or file in the connected repo to list. Omit for connection status. |
{
"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."
}
}
}Free. Short usage index. Then search_components to pick ids.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Refetches a scaffold you purchased (fresh clone command), no extra credits. Credit-flow projects need Maintain on. Same site_profile/delivery options as purchase_scaffold.
| Argument | Type | Description |
|---|---|---|
| delivery | string | "clone" (default) or "inline". |
| projectid* | string | The project id from a previous purchase_scaffold result. Required — your project is resolved from your authenticated account. |
| site_profile | boolean | string | false/omit: skip. true: attach this account's one site profile (errors if 0 or >1). A string: attach that named profile. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"projectid"
],
"properties": {
"delivery": {
"enum": [
"clone",
"inline"
],
"type": "string",
"description": "\"clone\" (default) or \"inline\"."
},
"projectid": {
"type": "string",
"description": "The project id from a previous purchase_scaffold result. Required — 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."
}
}
}Your site profiles (privacy, terms, cookies, licence, custom_field) as JSON. list: true for names, or siteprofilename for one; field filters. Use next.arguments when a purchase reply says incomplete: true.
| Argument | Type | Description |
|---|---|---|
| list | boolean | If true, return this account's profile names instead of a profile's content. |
| field | any | "all" (default), or an array from: privacy, terms, cookies, license, custom_field. |
| cursor | string | Resume token from a previous incomplete result, e.g. "doc:terms". |
| siteprofilename | string | The profile to fetch. Required unless list: true. |
{
"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."
}
}
}Buys a CI-green starter repo for component ids (credits via your signed-in account, or x402). Returns a git clone command and projectid. Red builds are refused and not charged. delivery "inline" returns files instead (more tokens).
| Argument | Type | Description |
|---|---|---|
| project | object | Saved project metadata. |
| delivery | string | "clone" (default) or "inline". |
| maintain | boolean | Renewable repeat access (default true). |
| components* | array | Component ids, e.g. ["nextjs-base","tailwind"]. |
| site_profile | boolean | string | true or a profile name: bake legal pages in. |
| admin_page_set | string | Extra file-set name. |
| template_files | any | Extra files: true, or [{name}|{source,dest}]. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"components"
],
"properties": {
"project": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Your label."
},
"description": {
"type": "string",
"description": "Notes."
}
},
"description": "Saved project metadata."
},
"delivery": {
"enum": [
"clone",
"inline"
],
"type": "string",
"description": "\"clone\" (default) or \"inline\"."
},
"maintain": {
"type": "boolean",
"description": "Renewable repeat access (default true)."
},
"components": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Component ids, e.g. [\"nextjs-base\",\"tailwind\"]."
},
"site_profile": {
"type": [
"boolean",
"string"
],
"description": "true or a profile name: bake legal pages in."
},
"admin_page_set": {
"type": "string",
"description": "Extra file-set name."
},
"template_files": {
"anyOf": [
{
"type": "boolean",
"const": true
},
{
"type": "array",
"items": {
"type": "object",
"properties": {
"dest": {
"type": "string",
"description": "Destination path."
},
"name": {
"type": "string",
"description": "Saved file name."
},
"source": {
"type": "string",
"description": "Path in connected repo."
}
}
}
}
],
"description": "Extra files: true, or [{name}|{source,dest}]."
}
}
}Report a catalog/code bug or request a component (files an issue on botkelp/components). Signed-in account, 10/day. No secrets.
| Argument | Type | Description |
|---|---|---|
| projectid | string | Optional project id this report relates to. |
| description* | string | What is wrong or what you want. Include enough detail to reproduce. No secrets. |
{
"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."
}
}
}Free. Compact catalog TSV: id, provides, requires, conflictsWith. Omit args for all.
| Argument | Type | Description |
|---|---|---|
| query | string | Words to match, e.g. "auth stripe". |
| detail | boolean | Add short descriptions. |
| provides | array | Required capability tags. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Words to match, e.g. \"auth stripe\"."
},
"detail": {
"type": "boolean",
"description": "Add short descriptions."
},
"provides": {
"type": "array",
"items": {
"type": "string"
},
"description": "Required capability tags."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name for this set, e.g. "default" or "acme-admin". |
| files* | array | The full set of files, e.g. [{ path: "app/admin/page.tsx", content: "..." }]. |
{
"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: \"...\" }]."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| disconnect | boolean | true: drop the connected repo. Omit to mint a fresh install URL. |
{
"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."
}
}
}Turn Maintain on/off for a project and/or rotate its project key. Off keeps existing clones; it stops future get_scaffold access.
| Argument | Type | Description |
|---|---|---|
| rotate | boolean | If true, mints a new project key and invalidates the old one. |
| maintain | boolean | |
| projectid* | string | The project id to change (from get_projects). Required — scoped to your authenticated account. |
{
"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 — scoped to your authenticated account."
}
}
}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).
| Argument | Type | Description |
|---|---|---|
| field* | object | Fields to change. Omitted fields keep their current value. |
| siteprofilename* | string | Name for this profile, e.g. "default" or "acme-co". |
{
"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\"."
}
}
}Remote `npm install && npm run build` of your edited files (send every file). Call with files -> WAIT + jobId; call again with jobId -> OK or FAIL with the error tail. Needs a purchased projectid.
| Argument | Type | Description |
|---|---|---|
| files | array | The full project to verify — a scaffold's files with your edits applied. Omit when polling with jobId. |
| jobId | string | Poll a previously started verification. Omit on the first call (pass files), pass the returned jobId on subsequent calls. |
| projectid* | string | The project id from a previous purchase_scaffold result — must be owned by this account. Required. |
| envVariables | array | Env var names to write placeholder values for before building (typically get_component's `envVariables` output) — needed for components that read process.env at build time (e.g. a Supabase client). |
{
"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 — 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 — 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) — needed for components that read process.env at build time (e.g. a Supabase client)."
}
}
}