Skip to content

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.

Deletes · 4Final · 1Changes · 3

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

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn2 info
  • The server marks "get_scaffold" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_scaffold" says "get": a word for reading.

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...a short-lived single-repo-scoped clone credential, and a persistent projectid for later u..."

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...ed via purchase_scaffold: a fresh clone credential and the current component versions, at..."

    What this check looks for

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".

      Matched text

      description: "...a short-lived single-repo-scoped clone credential, and a persistent projectid for later u..."

      What this check looks for
    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".

      Matched text

      description: "...ed via purchase_scaffold: a fresh clone credential and the current component versions, at..."

      What this check looks for
    • Warn

      The server marks "get_scaffold" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "get_scaffold" says "get": a word for reading.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.