BotKelp
by aiscimi-code · remote · no sign-in to list tools · v1.1.0 · published by GitHub user aiscimi-code
Verified component catalog over remote MCP: agents pick ids and get a project that builds.
15 tools: 4 can delete or cancel things, 1 do something that can't be undone, 3 change things and 7 only read.
Scanned Oct 22, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things3Claude Code: ask: see these tools
- Only reads7Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http botkelp https://www.botkelp.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnget_scaffold
The server marks "get_scaffold" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_scaffold" says "get": a word for reading.
The description mentions "credential".
What this check looks forMatched text
description: "...a short-lived single-repo-scoped clone credential, and a persistent projectid for later u..."
- Infoget_scaffold
The description mentions "credential".
What this check looks forMatched text
description: "...ed via purchase_scaffold: a fresh clone credential and the current component versions, at..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Deletes or cancels 4Claude Code: deny
set_adminpagesetCreates or fully replaces one named admin page set for this account — real file source (React/Next.js), not text config.No findings
Why it is in this group
- The name "set_adminpageset" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_githubReturns a GitHub App install URL so the user can grant BotKelp read access to one of their repos.No findings
Why it is in this group
- The name "set_github" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
set_projectsTurns Maintain on/off for one of this account's projects and/or rotates its project key.No findings
Why it is in this group
- The name "set_projects" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: false
set_siteprofileCreates or updates one named site profile for this account.No findings
Why it is in this group
- The name "set_siteprofile" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Can't be undone 1Claude Code: ask
purchase_scaffoldRequests 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.1 finding
Why it is in this group
- The name "purchase_scaffold" says "purchase": a word that usually means money moves, which cannot be taken back.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...a short-lived single-repo-scoped clone credential, and a persistent projectid for later u..."
Description, as the server wrote it 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: pay with linked BotKelp account credits (MCP OAuth 2.1 / Bearer bk_live_ at transport — never a tool argument), or omit account linkage and pay per-call in USDC via x402 (attach payment via the MCP call's _meta["x402/payment"] — no signup). 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 3Claude Code: ask
get_scaffoldRe-fetches a scaffold you already purchased via purchase_scaffold: a fresh clone credential and the current component versions, at no additional credit cost.2 findings
Why it is in this group
- The name "get_scaffold" says "get": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...ed via purchase_scaffold: a fresh clone credential and the current component versions, at..."
- Warn
The server marks "get_scaffold" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_scaffold" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
report_issueFile a GitHub issue on https://github.com/botkelp/components/issues about generated or catalog code, or request a new component/docs change.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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 a linked account (spam guard), rate-limited to 10 calls/day per account. projectid is optional context. Never include API keys or secrets in description.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
verify_scaffoldRuns a real `npm install && npm run build` against the given files on an isolated GitHub Actions runner and reports whether the project builds.No findings
Why it is in this group
- The description's first verb is "run": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 7Claude Code: allow
get_account_statusReports whether this connection is signed in (authenticated, authMethod), whether account tools will work (accountToolsReady), and whether a BotKelp account_api_key is stored for y…No findings
Why it is in this group
- The name "get_account_status" says "get": a word for reading.
Description, as the server wrote it Reports whether this connection is signed in (authenticated, authMethod), whether account tools will work (accountToolsReady), and whether a BotKelp account_api_key is stored for your OAuth sign-in (linked; not GitHub — see get_github). Never returns the key itself. Takes no parameters — your identity comes from the MCP transport, not the call.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_adminpagesetLists this account's admin page set names (omit name), or returns one set's exact files (pass name).No findings
Why it is in this group
- The name "get_adminpageset" says "get": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_componentReturns the exact, unrendered source files for one catalog component — the same files a purchased scaffold would include for it.No findings
Why it is in this group
- The name "get_component" says "get": a word for reading.
Description, as the server wrote it 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 signed-in account (MCP OAuth 2.1 or Authorization: Bearer bk_live_… at the transport; 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 for rendered, build-ready files.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_githubShows whether this account has a GitHub repo connected, or lists files under a path in that repo.No findings
Why it is in this group
- The name "get_github" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_helpFree, no API key.No findings
Why it is in this group
- The name "get_help" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_projectsLists this account's saved scaffold projects (id, name, description, repo, components, maintain state).No findings
Why it is in this group
- The name "get_projects" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_siteprofileReturns 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.No findings
Why it is in this group
- The name "get_siteprofile" says "get": a word for reading.
Description, as the server wrote it 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 a linked account (transport auth).
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http botkelp https://www.botkelp.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__botkelp__get_help",
"mcp__botkelp__get_component",
"mcp__botkelp__get_projects",
"mcp__botkelp__get_siteprofile",
"mcp__botkelp__get_adminpageset",
"mcp__botkelp__get_github",
"mcp__botkelp__get_account_status"
],
"ask": [
"mcp__botkelp__purchase_scaffold",
"mcp__botkelp__get_scaffold",
"mcp__botkelp__verify_scaffold",
"mcp__botkelp__report_issue"
],
"deny": [
"mcp__botkelp__set_projects",
"mcp__botkelp__set_siteprofile",
"mcp__botkelp__set_adminpageset",
"mcp__botkelp__set_github"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as botkelp. Review it before you use it.
