Menu ▾ ▴

#83 chore: make the MCP server and plugin ready for directory listings

closed
nobody
None
6 days ago
2026-10-20
Anonymous
No

Originally created by: Thanatos9404

Gets the MCP server and plugin ready for several directory listings. Each change below names the listing it unblocks.

Changes

  • Pin the plugin's MCP server (plugins/llmslim/.mcp.json). llmslim[mcp]>=0.11.0 is now llmslim[mcp]==0.11.1.
  • Unblocks: Claude plugin directory (claude.ai/directory). Its pre-submission checklist blocks a version range as "Unpinned uvx launcher".
  • A pinned package is still held for a human reviewer. That is a hold, not a rejection.
  • plugin.json and marketplace.json have no version ranges, so they are unchanged.
  • Add plugins/llmslim/README.md.
  • Unblocks: Claude plugin directory. A plugin with no README of at least 40 words (outside code blocks) is blocked. The security scan also expects the README to describe everything the plugin runs, sends or fetches.
  • It covers the five tools (remember, recall, list_memories, forget, fit_context) and the two commands (/llmslim:wrap-claude, /llmslim:savings).
  • It also covers install, requirements (uv; Python 3.10+), storage (~/.llmslim/memory.db) and the MIT licence.
  • It lists what reaches the network: uvx fetches the package from PyPI; tiktoken downloads its tokenizer file once and caches it; the optional proxy forwards requests to Anthropic's API.
  • Add gemini-extension.json at the repo root.
  • Unblocks: Gemini CLI extensions gallery (geminicli.com/extensions). The gallery crawls public repos daily, looking for the gemini-cli-extension topic and a root gemini-extension.json.
  • It also makes gemini extensions install https://github.com/Thanatos9404/llmslim work.
  • It has name, version, description and mcpServers, running the same pinned command. The format makes a context file optional, so there is none.
  • One-click install links in the README's existing MCP section, for VS Code, Cursor, LM Studio, Goose and Kiro.
  • Each runs uvx --from "llmslim[mcp]==0.11.1" llmslim mcp.
  • No directory requires these links. They give people who arrive from a listing (or from PyPI) a direct install.
  • LM Studio has no third-party gallery, so a link is the only way to list there.
  • Tests and release checklist.
  • tests/test_claude_plugin.py now checks that the plugin pin, the Gemini manifest and all five README links run the current release.
  • It also checks that the plugin README meets the 40-word minimum.
  • RELEASE_CHECKLIST.md lists the pins to bump with each release.
  • Repo topics (already applied; they are a repo setting, not part of this diff).
  • Added mcp, mcp-server, model-context-protocol, gemini-cli-extension, agent-memory, long-term-memory and claude-code-plugin. The repo now has 20, which is GitHub's limit.
  • The Gemini gallery needs gemini-cli-extension. The others help crawlers find the repo.

Listing bundle (commits 7d9f02e and a545cde)

For awesome-ai-plugins and awesome-codex-plugins. Both lists run the HOL plugin scanner (3.0.123, pinned by their CI action) on the repo and need a score of at least 80. It scored 70 on main.

  • Codex plugin manifest (plugins/llmslim/.codex-plugin/plugin.json). It starts the same pinned server as the Claude plugin, from the plugin's .mcp.json.
  • Unblocks: awesome-codex-plugins, which requires a Codex manifest. Its generator and validator find one in a subfolder, and plugins/<name>/ with .mcp.json beside the manifest is the layout of OpenAI's own plugins repo.
  • It also lifts the scan: the plugin folder scores close to full marks, while each manifest at the repo root repeats the repo-wide deductions.
  • Still needed for that list: an icon. Its validator requires interface.composerIcon to point to a file inside the plugin folder, and this PR doesn't add one.
  • plugins/llmslim/LICENSE and plugins/llmslim/SECURITY.md (a copy of the MIT licence; reports go to support@llmslim.app or a private advisory; 0.11.x supported).
  • Unblocks: the scanner's LICENSE and SECURITY.md checks for the plugin folder (6 points). awesome-codex-plugins also lists both files as required.
  • name: in both skills' frontmatter (savings, wrap-claude).
  • Unblocks: the scanner's skills parse check (5 points).
  • "strict": true in .claude-plugin/marketplace.json: on the plugin entry, where Claude Code reads it (true is the default, so nothing changes), and at the top level, where the scanner reads it.
  • Unblocks: the scanner's marketplace structure check (4 points). Without it the score is 79.
  • claude plugin validate . passes with one warning, because Claude Code ignores the top-level key. With --strict that warning fails the run. claude plugin validate --strict ./plugins/llmslim stays clean.
  • Network wording in the README and docs/MCP.md: the server makes no network calls of its own; the tokenizer downloads one file once and caches it. This matches the plugin README.
  • Tests, checklist, changelog. tests/test_claude_plugin.py checks the Codex manifest's version and server, the plugin's LICENSE and SECURITY.md, the skill names and strict. RELEASE_CHECKLIST.md adds the Codex manifest's version.

Not in this PR: uv.lock. uv lock fails because the gptme extra needs mcp<2 while the mcp, agents and all extras need mcp>=2. It needs a [tool.uv] conflicts entry in pyproject.toml first; with one, the lock resolves 315 packages and is 2.5 MB.

Checks for these commits:

  • HOL plugin scanner 3.0.123, offline, run the way both lists' CI runs it, minimum 80: 81/100 (196 of 242 points). Remaining deductions: test fixtures flagged as secrets, eval() in a benchmark script and unpinned GitHub Actions (each counted at the repo root for the Claude marketplace and the Gemini manifest), no lockfile, no .codexignore, and the Codex interface's missing icon, screenshots and terms URL.
  • Full suite with the coverage gate: passed (93.02%). ruff check . and ruff format --check . pass.
  • claude plugin validate ./plugins/llmslim and claude plugin validate . pass (the second with the warning above).

Also in this PR, after [#84] merged (main merged in, both CHANGELOG entries kept):

  • The Codex plugin has an icon (plugins/llmslim/assets/icon.png), which the awesome-codex-plugins validator requires.
  • SECURITY.md and CODE_OF_CONDUCT.md now point reports at support@llmslim.app. They gave a GitHub noreply address, which receives no mail.
  • Recall wording in docs/MCP.md, the plugin README and the Codex manifest now says messages come back whole where they fit, since a long message is returned partially when it does not fit the budget.
  • Scanner rerun on this commit: still 81/100.

Left out on purpose: a root .mcp.json for cursor.directory's repo scanner. It would offer the server to anyone who opens this repo in a client that reads project .mcp.json files. Manual entry on cursor.directory works without it.

Checks

  • pytest tests/test_claude_plugin.py tests/test_mcp_server.py tests/test_mcp_phase5.py: 42 passed.
  • Full suite (pytest, no coverage options): 1828 passed, 10 skipped.
  • ruff check . and ruff format --check . pass. All five JSON manifests parse.
  • uvx --from "llmslim[mcp]==0.11.1" llmslim mcp --help runs from PyPI.
  • Install links, checked by following each one:
  • VS Code: the redirect returns 302 to vscode:mcp/install with the expected JSON.
  • Cursor, LM Studio and Kiro: each web page forwards to its app's deeplink with the same parameters.
  • Goose: the page forwards to goose://extension (checked in Goose's source).
  • Not checked: clicking each link through to an installed app.

After merging

  • The Gemini gallery should pick the repo up within about a day of its daily crawl.
  • The Claude plugin directory listing is submitted from the developer portal, with path plugins/llmslim.

Related

Tickets: #22
Tickets: #84

Discussion

  • Anonymous

    Anonymous - 2026-10-20

    Originally posted by: vercel[bot]

    The latest updates on your projects. Learn more about Vercel for GitHub.

    Project Deployment Actions Updated
    llmslim Ready Ready Preview <relative-time datetime="2026-10-21T07:22:59.738Z">Oct 21, 2026 7:22am UTC</relative-time>
     
  • Anonymous

    Anonymous - 6 days ago

    Ticket changed by: Thanatos9404

    • status: open --> closed
     

Log in to post a comment.