{
  "markdown": "# InertialAI Claude Code plugin\n\nTime-series embedding and analysis tools for [Claude Code](https://docs.claude.com/en/docs/claude-code), powered by the [InertialAI API](https://docs.inertialai.com).\n\n## Install\n\n```\n/plugin marketplace add InertialAI/claude-plugin\n/plugin install inertialai@inertialai-plugins\n```\n\nThen configure your API key (see below). Requires [`uv`](https://docs.astral.sh/uv/) on `PATH` — the MCP server runs as a `uv` script with inline dependencies, nothing else to install.\n\n## API key\n\nThe server resolves the key in this order: `INERTIAL_API_KEY` env var → OS keychain → none. Pick whichever fits your platform:\n\n- **OS keychain (recommended on macOS / Linux desktop / Windows).** In Claude Code, run `/inertialai:setup` — it walks you through running a one-time terminal command that reads the key via `getpass`, validates it, and stores it in your OS keychain. The key never enters the chat.\n- **Environment variable (works everywhere including headless Linux / WSL).** Add `export INERTIAL_API_KEY='your-key'` to `~/.zshrc` or `~/.bashrc`, restart your shell.\n\nNever paste your API key into a Claude Code prompt — it would land in transcripts and request logs. Use one of the two paths above.\n\n## Layout\n\n```\n.\n├── .claude-plugin/marketplace.json          # marketplace catalog\n└── plugins/inertialai/\n    ├── .claude-plugin/plugin.json           # plugin manifest\n    ├── .mcp.json                            # declares the MCP server\n    ├── scripts/setup-key.py                 # one-time interactive key installer\n    ├── server/                              # MCP server\n    │   ├── server.py                        # entry point (PEP 723 script): builds FastMCP, registers tools\n    │   ├── store.py                         # SQLite-backed embedding store + vector helpers\n    │   ├── auth.py                          # API key resolution + setup-error payload\n    │   └── tools/                           # one file per MCP tool, each a Tool subclass\n    │       ├── _base.py                     # Tool base class\n    │       ├── __init__.py                  # ALL_TOOLS registry\n    │       ├── create_embedding.py\n    │       ├── list_models.py\n    │       ├── compare.py\n    │       ├── find_similar.py\n    │       ├── classify.py\n    │       ├── list_embeddings.py\n    │       ├── delete_embedding.py\n    │       └── check_setup.py\n    └── skills/                              # playbooks Claude auto-invokes\n        ├── TEMPLATE.md                      # copy this into skills/<name>/SKILL.md\n        ├── analyze-imu-session/SKILL.md\n        ├── find-anomalies/SKILL.md\n        ├── compare-sessions/SKILL.md\n        └── setup/SKILL.md\n```\n\n## Adding a new MCP tool\n\n1. Create `plugins/inertialai/server/tools/<your_tool>.py` defining a subclass of `Tool` (`tools/_base.py`). Set `name = \"<your_tool>\"` and implement `run` (sync or async) with typed parameters and a docstring — FastMCP derives the JSON schema and description from it.\n2. Import the class in `tools/__init__.py` and append it to `ALL_TOOLS`.\n3. Restart the MCP server (or run `/reload-plugins`).\n\nNo edits to `server.py` required.\n\n## Adding a new skill\n\nCopy `plugins/inertialai/skills/TEMPLATE.md` into a new directory:\n\n```\nmkdir plugins/inertialai/skills/<your-skill>/\ncp plugins/inertialai/skills/TEMPLATE.md plugins/inertialai/skills/<your-skill>/SKILL.md\n```\n\nFill in the frontmatter and sections, then reload.\n\n## Tools\n\nAll tools operate on stored **handles** rather than raw vectors, so 512-dim floats never enter the model's context.\n\n| Tool | Purpose |\n| --- | --- |\n| `create_embedding` | Call the API, store the vector locally, return a handle. Pass `label` to add to a classifier corpus. |\n| `list_models` | List available embedding models. |\n| `compare` | Cosine similarity between two handles. |\n| `find_similar` | Top-k most similar handles to a query. |\n| `classify` | Nearest-neighbor classify against the labeled corpus. |\n| `list_embeddings` / `delete_embedding` | Manage the local store. |\n| `check_setup` | Diagnose API key state and surface setup instructions. |\n\nEmbeddings persist in `${CLAUDE_PLUGIN_DATA}/embeddings.db`.\n\n## Adding new models\n\nThe API takes `model` as a parameter, so new embedding models work without a plugin update. New endpoint families (forecasting, classification-as-a-service, etc.) get new tools added to `server/server.py`.\n\n## Roadmap\n\nCurrently Claude Code only. The MCP server runs as a local subprocess (`uv run --script`), which Cowork's hosted runtime doesn't support. Cowork compatibility is pending a hosted HTTP MCP gateway at `mcp.inertialai.com`; once that ships, the same plugin will work in both products.\n",
  "bytes": 4685,
  "sha": "abebde968afe68e11ce0e578532d0dac64a548970a3409b4062d8520fd2e501d",
  "repo_slug": "inertialai/claude-plugin",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_inertialai_claude_plugin_inertialai_489ad35a/readme"
}