# Kendr Skill Pack SDK

This SDK is the file contract for publishing versioned skills and bundled MCP servers to KendrWeb.

## Pack layout

```text
my-pack/
  .cursor-plugin/plugin.json
  mcp.json
  server.py
  skills/
    my-skill/
      SKILL.md
```

## Versioning

`plugin.json.version` is the skill/MCP pack version. Bump it for every behavior change that users should receive through Kendr Desktop's update action.

Kendr Desktop stores the installed version, compares it with `/api/skills/catalog`, and can update the installed pack from its original source.

## Manifest

Validate `.cursor-plugin/plugin.json` against `plugin.schema.json`.

```json
{
  "name": "Docker MCP",
  "description": "Read-only Docker inspection tools and guidance for agentic mode.",
  "author": { "name": "Kendr" },
  "version": "0.1.0",
  "homepage": "https://kendr.org/docs/skills-and-mcp.html",
  "skills": "./skills",
  "mcpServers": "./mcp.json"
}
```

## MCP config

Use Cursor-style `mcpServers` JSON. Relative paths are resolved inside the installed pack directory.

```json
{
  "mcpServers": {
    "example": {
      "command": "${KENDR_PYTHON}",
      "args": ["server.py"],
      "timeout": 30
    }
  }
}
```

`${KENDR_PYTHON}` is replaced with the Python interpreter that runs the Kendr backend.

## KendrWeb catalog entry

Validate hosted catalog entries against `catalog-entry.schema.json`. KendrWeb serves:

- `GET /api/skills/catalog`
- `GET /api/skills/packs/<slug>/archive`

Hosted entries should include `version`, `install_source`, `archive_sha256`, `skill_count`, `mcp_server_names`, and `tool_count`.

## Local checks

Before publishing:

1. Install the pack from a local folder in Kendr Desktop.
2. Install the pack from an HTTP zip archive.
3. Verify MCP discovery lists the expected tools.
4. Disable the pack and confirm agentic mode no longer sees its tools or skills.
5. Bump `version`, update the hosted pack, and confirm the desktop update action installs the new version.
