Skip to the content.

Plugins, extensions and store listings

Compartment is one Python package on PyPI and one MCP server (compartment serve, stdio, 14 memory tools). Everything below is a way for a particular host or catalogue to find that server and start it. This page says, store by store, what the listing is, how a user installs from it, and what the maintainer has to do to publish or update it. The formats were checked against each host’s own repository in October 2026; the source is named for each.

tests/test_plugin_manifests.py checks every manifest here against the parts of its host’s format that matter, and against each other (same command, same subcommand, one caller per host, no wrong tool count). tests/test_version_lockstep.py fails the build when any manifest carrying a version disagrees with the package, or when a file anywhere in the tree carries a version it does not check.

At a glance

Store / host Listing in this repo User installs with Maintainer, each release Maintainer, once
PyPI pyproject.toml pip install compartment automatic (publish.yml) -
Official MCP Registry server.json their client’s registry browser, uvx compartment serve automatic (publish-registry.yml) -
Claude Code plugins .claude-plugin/ /plugin marketplace add MaxFreedomPollard/Compartment version is gated; nothing else submit to Anthropic’s plugin directory
Claude Desktop extension packaging/mcpb/ the .mcpb from the release automatic (publish.yml builds and attaches it once PyPI has the version) submit to Anthropic’s extension directory
Codex plugins root plugin.json + .claude-plugin/marketplace.json codex plugin marketplace add MaxFreedomPollard/Compartment nothing -
Gemini CLI extensions gemini-extension.json, GEMINI.md gemini extensions install https://github.com/MaxFreedomPollard/Compartment nothing (crawled daily) - (the gemini-cli-extension topic is set)
Hermes Agent integrations/hermes/, root plugin.json + mcp.json compartment integrate hermes or hermes plugins install MaxFreedomPollard/Compartment nothing upstream PR (see below)
OpenClaw .claude-plugin/ (as a bundle), skills/ compartment integrate openclaw nothing publish the skill on ClawHub
Smithery the .mcpb Smithery’s install command smithery mcp publish smithery auth login
Glama glama.json, Dockerfile Glama’s page nothing -
Docker MCP Catalog packaging/docker-mcp/server.yaml Docker Desktop, MCP Toolkit nothing (Docker bumps the pin) PR to docker/mcp-registry
Cline marketplace llms-install.md Cline’s MCP marketplace nothing issue at cline/mcp-marketplace
Continue hub packaging/continue/compartment.yaml hub.continue.dev, or copy the file republish the block publish the block
goose add/goose.html the Install button nothing PR to goose’s extension directory
LM Studio add/lmstudio.html the Add button nothing -
Cursor deeplink in the README the Add to Cursor button nothing -
VS Code, Copilot deeplinks in the README, server.json the Install buttons, VS Code’s MCP gallery nothing -
Oh My Pi integrations/omp/extension.ts copy the file; compartment integrate omp nothing -

The command a host runs, and PATH

Most listings start the server as the bare command compartment, because their formats allow nothing else portable: Agent Plugins (mcp.json, read by Codex, Hermes and OpenClaw) requires a single bare executable name or a path inside the plugin, and a Claude Code, Gemini, Continue or LM Studio entry has no way to discover where pip put the script. A bare name works when the host inherits the shell’s PATH, which terminal programs (Claude Code, Codex, Gemini CLI, Oh My Pi) do. GUI apps started from the Dock, the Start menu or a desktop launcher often do not, and then the server fails with command not found or spawn compartment ENOENT.

Where a format allows something safer, the listing uses it:

For a hand-written config in a GUI client, use the absolute path: which compartment (macOS, Linux) or where compartment (Windows).

The caller

Every listing passes --caller <host>, which names the client in the audit log and is the key per-caller ACL entries are written against. Where compartment integrate wires the same host, the listing uses the same name (claude-code, claude-desktop, gemini, lmstudio, goose, continue), so one app never shows up as two clients. The Agent Plugins package uses agent-plugin, because Codex, Hermes and OpenClaw all read it; the Docker image uses docker. A test enforces all of this.

Using two routes at once

A host wired two ways starts two servers, and the model sees every tool twice:

Store by store

Official MCP Registry

Claude Code plugin marketplace

Claude Desktop extension (MCP Bundle)

Codex

Gemini CLI

Hermes Agent

OpenClaw

Smithery

Glama

Docker MCP Catalog

Cline marketplace

Continue hub

goose

LM Studio, Cursor, VS Code, Kiro

Oh My Pi

Directories that scrape

mcp.so, MCP Market, LobeHub, mcpservers.org, PulseMCP, MCP Toplist, the toolsdk registry and the awesome lists read GitHub, PyPI or the MCP Registry. Nothing in this repository is specific to them.