{
  "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
  "note": "Compare schemaHash before calling a tool. A changed hash means the contract changed. Verify signature with /.well-known/jwks.json.",
  "tools": [
    {
      "tool": "quote_single_use",
      "version": "1.0.0",
      "summary": "No auth. Returns a Base USDC quote for one generate without an account. Pay exact amountAtomic to payTo, then call the tool with payment.quoteId and payment.txHash.",
      "gated": false,
      "permissions": [
        "registry.read"
      ],
      "rateLimitPerMinute": 20,
      "maxExecutionMs": 5000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "sku": {
            "type": "string",
            "description": "single-generate (default). One generate_scaffold.",
            "enum": [
              "single-generate"
            ]
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:ab1a528263ffc619d01d9019a66dbf32d50df7569d7f8576694a9f54c7488ece",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "generate_scaffold",
      "version": "1.1.0",
      "summary": "Copy catalog component files for a stack. Exact pins that do not fit return COMPONENT_VERSION_INCOMPATIBLE — never a silent substitute. Pass get_site_profile: true to attach dashboard legal docs in the same result (not in the tree).",
      "gated": true,
      "permissions": [
        "registry.read",
        "component.generate"
      ],
      "rateLimitPerMinute": 10,
      "maxExecutionMs": 30000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "components"
        ],
        "oneOf": [
          {
            "required": [
              "apiKey"
            ]
          },
          {
            "required": [
              "payment"
            ]
          }
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Shown once at creation. Omit if paying with payment.quoteId + payment.txHash.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "payment": {
            "type": "object",
            "description": "Single-use Base USDC payment. No account. Get quoteId from quote_single_use, send exact USDC, pass txHash.",
            "additionalProperties": false,
            "required": [
              "quoteId",
              "txHash"
            ],
            "properties": {
              "quoteId": {
                "type": "string",
                "description": "From quote_single_use. UUID.",
                "minLength": 36,
                "maxLength": 36
              },
              "txHash": {
                "type": "string",
                "description": "Base transaction hash of the USDC transfer.",
                "pattern": "^0x[a-fA-F0-9]{64}$"
              }
            }
          },
          "components": {
            "type": "array",
            "description": "Catalog ids from /catalog.json. Always include nextjs-base. Each item is an id, id@version, or { id, version?, allow_incompatible? }. Exact pins that do not fit stack return COMPONENT_VERSION_INCOMPATIBLE and alternatives — never a silent substitute.",
            "minItems": 1,
            "maxItems": 12,
            "items": {
              "oneOf": [
                {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9-]{0,63}(?:@\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.]+)?)$|^[a-z][a-z0-9-]{0,63}$"
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9-]{0,63}$"
                    },
                    "version": {
                      "type": "string",
                      "description": "Exact pin. Omit to auto-select."
                    },
                    "allow_incompatible": {
                      "type": "boolean"
                    }
                  }
                }
              ]
            }
          },
          "stack": {
            "type": "object",
            "description": "Detected project stack. When set, compatibility is a hard registry rule. Omit to receive latest.",
            "additionalProperties": false,
            "properties": {
              "nextjs": {
                "type": "string"
              },
              "react": {
                "type": "string"
              },
              "typescript": {
                "type": "string"
              },
              "supabase_ssr": {
                "type": "string"
              }
            }
          },
          "allow_incompatible": {
            "type": "boolean",
            "description": "Expert override. Returns the requested pin with a warning instead of blocking."
          },
          "get_site_profile": {
            "type": "boolean",
            "description": "If true, attach this account's populated dashboard legal documents in the same result. They are not added to the file tree. If incomplete, call get_site_profile with next.arguments.cursor."
          },
          "projectName": {
            "type": "string",
            "description": "Folder / project name stamped into generated files.",
            "minLength": 1,
            "maxLength": 80
          },
          "repoName": {
            "type": "string",
            "description": "Repo label stamped into generated files (org/name).",
            "minLength": 1,
            "maxLength": 200
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:89bad0f0dee42724fbf475b29c0ddd5090975392f65d54cd32b199c368cc7ba3",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "get_scaffold_template",
      "version": "1.0.0",
      "summary": "Fetch a scaffold template repo. Costs 100 credits. Admin/legal pages are not in the repo; pass get_site_profile: true to attach dashboard documents in the same result.",
      "gated": true,
      "permissions": [
        "registry.read",
        "account.credits"
      ],
      "rateLimitPerMinute": 20,
      "maxExecutionMs": 15000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Shown once at creation. Costs 100 credits.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "get_site_profile": {
            "type": "boolean",
            "description": "If true, attach dashboard legal documents in the same result. They are not written into the template repo."
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:ea391769d59a17675817dd0684c48fce1ace3ab31ddc64ae3cdb65e60d88c41d",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "get_site_profile",
      "version": "1.0.0",
      "summary": "Return this account's populated dashboard legal documents as JSON bodies + paths. Follow-up when a generate result has incomplete: true. Never written into tpl repos.",
      "gated": true,
      "permissions": [
        "component.generate"
      ],
      "rateLimitPerMinute": 30,
      "maxExecutionMs": 5000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "botKelpKey"
        ],
        "properties": {
          "botKelpKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "cursor": {
            "type": "string",
            "description": "Resume token from an incomplete previous result, e.g. doc:terms.",
            "maxLength": 80
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:5a6310ec40396ca6717b67392b9685f4a8dc3557c836dc7051119a3fee6ce08f",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "knowledge_search",
      "version": "1.0.0",
      "summary": "Search the BotKelp catalog knowledge base. Account holders only. Not a web search.",
      "gated": true,
      "permissions": [
        "knowledge.read"
      ],
      "rateLimitPerMinute": 30,
      "maxExecutionMs": 5000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "query",
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Knowledge tools are account-holders only.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "query": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "technology": {
            "type": "string",
            "maxLength": 80
          },
          "version": {
            "type": "string",
            "maxLength": 32
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:e6f8e9c62edcac8199547ece9f4031e0d52c06037f374713087825495ec840fc",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "knowledge_get",
      "version": "1.0.0",
      "summary": "Full knowledge record for a catalog component. Account holders only.",
      "gated": true,
      "permissions": [
        "knowledge.read"
      ],
      "rateLimitPerMinute": 30,
      "maxExecutionMs": 5000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Knowledge tools are account-holders only.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Catalog id or name"
          },
          "version": {
            "type": "string",
            "maxLength": 32
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:0478a1ced4e5599a1b5bfdd0172794f7df64f339aeef4080a5cac93449365039",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "knowledge_ask",
      "version": "1.0.0",
      "summary": "Implementation-ready answer from supplied catalog knowledge. Account holders only.",
      "gated": true,
      "permissions": [
        "knowledge.read"
      ],
      "rateLimitPerMinute": 10,
      "maxExecutionMs": 8000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "question",
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Knowledge tools are account-holders only.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "question": {
            "type": "string",
            "minLength": 3,
            "maxLength": 500
          },
          "context": {
            "type": "string",
            "maxLength": 400
          },
          "technology": {
            "type": "string",
            "maxLength": 80
          },
          "version": {
            "type": "string",
            "maxLength": 32
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:fb4f35e0d16bee9fd5ea66f0de876f13e4894d29c9fcc3efbfa2eed6fb2f1d87",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "knowledge_sources",
      "version": "1.0.0",
      "summary": "Authoritative sources for a catalog item. Account holders only.",
      "gated": true,
      "permissions": [
        "knowledge.read"
      ],
      "rateLimitPerMinute": 30,
      "maxExecutionMs": 5000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name",
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Knowledge tools are account-holders only.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "version": {
            "type": "string",
            "maxLength": 32
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:bce7eb169764c01aacc9a2b3f5c8f7a12a5d3aaf53b30f4522400dedf14a1b8f",
      "implementation": "catalog-copy+stamp+integrity"
    },
    {
      "tool": "knowledge_implementation",
      "version": "1.0.0",
      "summary": "How to implement a catalog component for a task. Account holders only.",
      "gated": true,
      "permissions": [
        "knowledge.read"
      ],
      "rateLimitPerMinute": 10,
      "maxExecutionMs": 8000,
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "component",
          "task",
          "apiKey"
        ],
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "Account API key. Prefix bk_live_. Knowledge tools are account-holders only.",
            "pattern": "^bk_live_[A-Za-z0-9]+$",
            "maxLength": 200
          },
          "component": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Catalog id"
          },
          "task": {
            "type": "string",
            "minLength": 3,
            "maxLength": 400
          },
          "project_context": {
            "type": "string",
            "maxLength": 400
          }
        }
      },
      "publisher": "INTLEACHT RESEARCH LIMITED trading as BotKelp",
      "schemaHash": "sha256:204884b40c686fa91835888fb11f733aeb4cdd4aa3d339632673f83fcec9b67a",
      "implementation": "catalog-copy+stamp+integrity"
    }
  ],
  "key": {
    "crv": "Ed25519",
    "x": "48F-kGPNloPacWnaY18TLCSOB0c3ikL7bIt3n9Ng-4U",
    "kty": "OKP",
    "alg": "EdDSA",
    "use": "sig",
    "kid": "botkelp-mcp-1"
  },
  "signature": {
    "alg": "EdDSA",
    "kid": "botkelp-mcp-1",
    "signature": "ChuIc1SymbMQXkxe3QoDCtZJKnbuMJd83X0v07EAz3vUBVbkWpBpM2l8NFPoKfuFgqzBrN14L9jO2-eNUAPDCQ"
  }
}
