BotKelp MCP
A remote MCP server providing a catalog of verified building blocks for AI coding agents. It allows agents to assemble scaffolds for full-stack applications (Next.js, Django, etc.) that actually build, handling authentication and payments via x402 or OAuth.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://www.botkelp.com/mcpWhat you can do with it
- Assemble a Next.js + Supabase + Stripe app scaffold
- Browse verified component catalog for login, payments, database
- Generate project files that install and build correctly
- Manage keys and credit from a single dashboard
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- botkelp 0.2.0
- MCP protocol
- 2025-06-18
- Tools
- 16 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
get_help — Get help
Free. Short usage index. Then search_components to pick ids.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_components — Search components
Free. Compact catalog TSV: id, provides, requires, conflictsWith. Omit args for all.
{
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_component — Get component source
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.
{
"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\"."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}purchase_scaffold — Purchase scaffold
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).
{
"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}]."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}get_scaffold — Get scaffold
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.
{
"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."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}set_projects — Set projects
Turn Maintain on/off for a project and/or rotate its project key. Off keeps existing clones; it stops future get_scaffold access.
{
"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."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}get_siteprofile — Get site 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.
{
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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).
{
"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\"."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}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 a linked account (transport auth).
{
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"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: \"...\" }]."
}
}
}{
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}verify_scaffold — Verify scaffold
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.
{
"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)."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}report_issue — Report an issue
Report a catalog/code bug or request a component (files an issue on botkelp/components). Signed-in account, 10/day. 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."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}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.
{
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}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.
{
"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."
}
}
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}get_account_status — Get account status
No params. Says whether you are signed in (authenticated) and account tools work (accountToolsReady). Never returns a key.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
catalog — Component catalog
Full BotKelp component catalog as TSV (with descriptions). No tool call needed.
botkelp://catalog30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1085 ms
- 95th percentile latency
- 1085 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1085 ms · metadata changed · 16 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http botkelp-mcp https://www.botkelp.com/mcpCodex
codex mcp add botkelp-mcp --url https://www.botkelp.com/mcpCursor
{
"mcpServers": {
"botkelp-mcp": {
"url": "https://www.botkelp.com/mcp"
}
}
}Cline
{
"mcpServers": {
"botkelp-mcp": {
"type": "streamableHttp",
"url": "https://www.botkelp.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"botkelp-mcp": {
"type": "http",
"url": "https://www.botkelp.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http botkelp-mcp https://www.botkelp.com/mcpClaude Desktop
{
"mcpServers": {
"botkelp-mcp": {
"url": "https://www.botkelp.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"botkelp-mcp": {
"serverUrl": "https://www.botkelp.com/mcp"
}
}
}Let your agent find its tools
Find servers like BotKelp MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.