Skip to content

Directories and install buttons

Beyond the package channels (see Releasing), MCP clients and directories discover servers through a few manifests in the repository and through the install buttons in the README. Nothing here is published or listed yet: every listing below needs the repository to be public and the first release out, and most need one step by the owner.

FileRead byKept current by
server.jsonThe MCP Registry (and the directories that mirror it)publish-registry.yml, on every newest release (MCP Registry)
glama.jsonGlama: names jmrplens as the maintainer who may claim the listingHand-written; a test checks its shape
plugin.json, mcp.jsonAgent Plugins 1.0 hosts (agent-plugins.org): the plugin and its MCP server, the container image with every variable server.json declares forwardedHand-written; test/release validates both against the vendored Agent Plugins schemas and holds the name, version (VERSION), description and links to the other manifests
.plugin/plugin.json, .plugin/plugin.schema.jsonHosts still on the older Open Plugins layout (a logo and mcpServers: ./mcp.json)Hand-written; validated against its own schema and held equal to plugin.json
lhm.plugin.jsonThe LobeHub Marketplace: its capability badges come from the manifest’s tools, prompts and resources, since it cannot introspect a binary or an imagecmd/gen_lhm_manifest writes the three arrays from a real tools/list, prompts/list and resources/list on the default surface; make check fails when they are stale
llms.txtAssistants and tools that read the llms.txt indexcmd/gen_llms writes it from the catalog (one line per domain) and checks every documentation link against the site’s pages; make check fails when it is stale
llms-install.mdAssistants asked to install the server (the convention Cline introduced)Hand-written

Every description that quotes the catalog’s size (” actions in domains”) is checked against the catalog, and every version against VERSION, so a release bumps them with VERSION.

The README’s install table has one-click buttons for VS Code and VS Code Insiders (which prompt for ARCANE_URL and, masked, for ARCANE_API_KEY), Cursor, LM Studio and Kiro (which register placeholders to edit), all registering the container image ghcr.io/jmrplens/arcane-mcp:latest with -e ARCANE_URL -e ARCANE_API_KEY, plus the three per-system .mcpb bundles for Claude Desktop and the Claude Code command. A button’s configuration travels inside its URL, so no text search sees it, and each client reads it differently: VS Code’s redirect and Kiro take percent-encoded JSON, Cursor and LM Studio base64, and VS Code alone takes prompt definitions, from a top-level inputs parameter beside config (insiders.vscode.dev forwards only name, that parameter and the entry’s fields; prompts nested in config are dropped). cmd/audit_install_buttons (make check) reads every button in the README, docs/, llms-install.md and the site’s sources by its endpoint’s rules, and mcp.json, and holds them to a known endpoint and the name arcane, to the image server.json declares, to variables that server.json declares and internal/config reads (the two required ones always forwarded, the env block setting exactly the forwarded ones), to top-level prompts in VS Code (the key masked) and placeholders elsewhere, to one argument list for every button, and to .mcpb downloads from this repository’s releases that server.json declares.

The README’s directory badges (Glama, LobeHub, MCP Toplist, Cursor Directory) and the SonarCloud badges are written in an HTML comment until each listing exists: a badge for a listing that does not exist renders as an error. There is no SonarCloud project for this repository yet (sonar.yml skips the scan until SONAR_TOKEN exists).

  1. MCP Registry: nothing to do; publish-registry.yml publishes every newest release.
  2. Glama: once the repository is public, find the server on glama.ai (or add it with its repository URL) and claim it while signed in to GitHub as jmrplens; Glama checks the claim against glama.json. Glama then scores the server; add its badge to the README.
  3. LobeHub Marketplace: from a machine with Node, once: npx -y @lobehub/market-cli@0.0.44 login and npx -y @lobehub/market-cli@0.0.44 github connect (both interactive), then the first listing with npx -y @lobehub/market-cli@0.0.44 plugin publish https://github.com/jmrplens/arcane-mcp. After each later release, make publish-lobehub (it checks the manifest and runs plugin update). The listing is jmrplens-arcane-mcp.
  4. Cursor Directory: submit the repository on cursor.directory, signed in with GitHub; the listing links the Cursor install button.
  5. MCP Toplist: it lists servers from the MCP Registry, so the first registry publish should be enough; add its badge once the server appears.
  6. Claude Desktop’s extension directory: a separate submission form for the .mcpb extension. It asks for a privacy policy (Privacy) and for test credentials: a reachable Arcane and an API key the reviewers can use. Whether to run such an Arcane, and what that key may do (a read-only key on a throwaway instance), is the owner’s decision; until then, the extension is offered from the releases only.