Server definition
- Hash
- sha256:d21705358f231e4c01e71c9f8eef74accd75260a52e422e806b84b3aa0d91bd7
- What it is
- What a remote MCP server returned when asked what it offers: 15 tools
The blob, as servednamed by its sha256
{
"instructions": "Call get_help first — it lists every tool, every catalog component, and available versions, with no API key required. You never pass any API key as a tool argument: the server authenticates you once via MCP OAuth 2.1 at the transport and injects your linked BotKelp account key on your behalf. Call get_account_status to check whether your key is linked. If generated or catalog code is wrong, outdated, fails to build, has a security issue, or you want a new component, call report_issue.",
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_account_status",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"description": "The set to fetch. Omit to list this account's set names instead.",
"type": "string"
}
},
"type": "object"
},
"name": "get_adminpageset",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"component": {
"description": "Component id, or id@version, e.g. \"[email protected]\".",
"type": "string"
}
},
"required": [
"component"
],
"type": "object"
},
"name": "get_component",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"path": {
"description": "Folder or file in the connected repo to list. Omit for connection status.",
"type": "string"
}
},
"type": "object"
},
"name": "get_github",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_help",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_projects",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"delivery": {
"description": "\"clone\" (default): git clone command. \"inline\": files in the reply. No git needed. More tokens.",
"enum": [
"clone",
"inline"
],
"type": "string"
},
"projectid": {
"description": "The project id from a previous purchase_scaffold result. Required — your project is resolved from your authenticated account.",
"type": "string"
},
"site_profile": {
"description": "false/omit: skip. true: attach this account's one site profile (errors if 0 or >1). A string: attach that named profile.",
"type": [
"boolean",
"string"
]
}
},
"required": [
"projectid"
],
"type": "object"
},
"name": "get_scaffold",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"description": "Resume token from a previous incomplete result, e.g. \"doc:terms\".",
"type": "string"
},
"field": {
"anyOf": [
{
"const": "all",
"type": "string"
},
{
"items": {
"enum": [
"privacy",
"terms",
"cookies",
"license",
"custom_field"
],
"type": "string"
},
"type": "array"
}
],
"description": "\"all\" (default), or an array from: privacy, terms, cookies, license, custom_field."
},
"list": {
"description": "If true, return this account's profile names instead of a profile's content.",
"type": "boolean"
},
"siteprofilename": {
"description": "The profile to fetch. Required unless list: true.",
"type": "string"
}
},
"type": "object"
},
"name": "get_siteprofile",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"admin_page_set": {
"description": "Optional extra file-tree name (same overlay as template_files). Prefer site_profile / template_files.",
"type": "string"
},
"components": {
"description": "Component ids to include, e.g. [\"nextjs-base\", \"tailwind\", \"supabase-client\"].",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array"
},
"delivery": {
"description": "\"clone\" (default): git clone command. \"inline\": files in the reply. No git needed. More tokens.",
"enum": [
"clone",
"inline"
],
"type": "string"
},
"maintain": {
"description": "Keep repeat access to this repo renewable. Defaults to true. Ignored for x402 (accountless) purchases.",
"type": "boolean"
},
"project": {
"description": "Project metadata to save alongside the purchased scaffold.",
"properties": {
"description": {
"description": "Free-text description saved with the project.",
"type": "string"
},
"name": {
"description": "Name used for the project and in package.json.",
"type": "string"
}
},
"type": "object"
},
"site_profile": {
"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, …).",
"type": [
"boolean",
"string"
]
},
"template_files": {
"anyOf": [
{
"const": true,
"type": "boolean"
},
{
"items": {
"properties": {
"dest": {
"description": "Destination in the generated project. Defaults to the file's stored path / source path.",
"type": "string"
},
"name": {
"description": "Saved dashboard template file name.",
"type": "string"
},
"source": {
"description": "Path in the connected GitHub repo, e.g. \"legal/gdpr.md\" or \"app/rules/page.tsx\".",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
],
"description": "true: every saved dashboard template file. Or a list of {name} and/or {source, dest} from the connected GitHub repo."
}
},
"required": [
"components"
],
"type": "object"
},
"name": "purchase_scaffold",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"description": {
"description": "What is wrong or what you want. Include enough detail to reproduce. No secrets.",
"type": "string"
},
"projectid": {
"description": "Optional project id this report relates to.",
"type": "string"
}
},
"required": [
"description"
],
"type": "object"
},
"name": "report_issue",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"files": {
"description": "The full set of files, e.g. [{ path: \"app/admin/page.tsx\", content: \"...\" }].",
"items": {
"properties": {
"content": {
"type": "string"
},
"path": {
"description": "Relative file path, e.g. \"app/layout.tsx\".",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"name": {
"description": "Name for this set, e.g. \"default\" or \"acme-admin\".",
"type": "string"
}
},
"required": [
"name",
"files"
],
"type": "object"
},
"name": "set_adminpageset",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"disconnect": {
"description": "true: drop the connected repo. Omit to mint a fresh install URL.",
"type": "boolean"
}
},
"type": "object"
},
"name": "set_github",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"maintain": {
"type": "boolean"
},
"projectid": {
"description": "The project id to change (from get_projects). Required — scoped to your authenticated account.",
"type": "string"
},
"rotate": {
"description": "If true, mints a new project key and invalidates the old one.",
"type": "boolean"
}
},
"required": [
"projectid"
],
"type": "object"
},
"name": "set_projects",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"field": {
"description": "Fields to change. Omitted fields keep their current value.",
"properties": {
"cookies": {
"type": "string"
},
"custom_field": {
"additionalProperties": {
"type": "string"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"license": {
"type": "string"
},
"privacy": {
"type": "string"
},
"terms": {
"type": "string"
}
},
"type": "object"
},
"siteprofilename": {
"description": "Name for this profile, e.g. \"default\" or \"acme-co\".",
"type": "string"
}
},
"required": [
"siteprofilename",
"field"
],
"type": "object"
},
"name": "set_siteprofile",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"envVariables": {
"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).",
"items": {
"type": "string"
},
"type": "array"
},
"files": {
"description": "The full project to verify — a scaffold's files with your edits applied. Omit when polling with jobId.",
"items": {
"properties": {
"content": {
"type": "string"
},
"path": {
"description": "Relative file path, e.g. \"app/layout.tsx\".",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"jobId": {
"description": "Poll a previously started verification. Omit on the first call (pass files), pass the returned jobId on subsequent calls.",
"type": "string"
},
"projectid": {
"description": "The project id from a previous purchase_scaffold result — must be owned by this account. Required.",
"type": "string"
}
},
"required": [
"projectid"
],
"type": "object"
},
"name": "verify_scaffold",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:d21705358f231e4c01e71c9f8eef74accd75260a52e422e806b84b3aa0d91bd7 | sha256sum