Skip to main content
Glama

Lab Registry Server

MCP server exposing the Gen-e2 Lab Registry — skills, agents, commands, and hooks — to any MCP-compatible client (Claude Code, GitHub Copilot agent mode). Designed for the Innovation Lab at Palo IT Singapore.

Canonical repository: https://github.com/Palo-IT-GitHub-Demos/lab-registry-mcp

This repository contains only the MCP server. It does not embed the gen-e2-marketplace project, which remains the registry source of truth. In normal usage, the server reads that source directly from GitHub.


What it does

This MCP server connects to the gen-e2 plugins repository and gives agents direct access to the library from VS Code.

Who it's for

It is mainly intended for Labs developers, especially those who are new to gen-e2.

Why it exists

It makes the gen-e2 library easier to discover, reuse, and integrate across projects.

Main use cases

  • Explore the gen-e2 artefact library in more depth

  • Find a specific plugin or artefact by name and integrate it easily into the current project

  • Get suggestions for which gen-e2 artefacts are most relevant to the current project

  • Stay informed about new gen-e2 plugins and updates to existing ones


Related MCP server: Taproom

How it works

gen-e2-marketplace/          ← source of truth (read-only, never written)
  .claude-plugin/
    marketplace.json         ← list of all 13 plugins with semver versions
  plugins/
    android/
      .claude-plugin/plugin.json
      CHANGELOG.md
      skills/android-architecture/SKILL.md   ← YAML frontmatter + markdown body
      agents/android-architect.agent.md
      commands/add-screen.md
      hooks.json
    research-suite/ ...
    delivery/ ...
    ...

lab-registry-mcp/            ← this repo
  src/lab_registry/
    registry.py              ← reads marketplace on first call, caches result
    models.py                ← RegistryEntry, Plugin (Pydantic)
    server.py                ← FastMCP, 15 tools registered via @mcp.tool()
    tools/
      search.py              ← list_entries, search_entries, suggest_entries, suggest_plugins
      fetch.py               ← get_entry, get_plugin, get_entry_by_id, list_plugins, get_changelog
      compliance.py          ← check_compliance, check_compliance_plugin
      stats.py               ← get_marketplace_stats
      validate.py            ← validate_entry

Startup sequence:

  1. MCP client (Claude Code or Copilot) spawns the server process via stdio

  2. Server responds to initialize — no files read yet

  3. On first tool call, load_registry() reads from either REGISTRY_GITHUB_REPO or REGISTRY_PATH, parses marketplace metadata, indexes plugin entries, and extracts updated_at from CHANGELOG.md when available

  4. Result is cached in memory (lru_cache) for the life of the process

  5. All subsequent tool calls use the in-memory index — no disk access except get_entry (reads file content on demand)

Versioning model: version lives at the plugin level (from plugin.json), not per individual artifact. All 33 android artefacts share plugin_version: "0.1.0". If the android plugin bumps to 0.2.0, all its artefacts are considered outdated.


Install

# Install directly from GitHub
pip install "git+https://github.com/Palo-IT-GitHub-Demos/lab-registry-mcp"

# Or pin the current release tag
pip install "git+https://github.com/Palo-IT-GitHub-Demos/lab-registry-mcp@v0.3.1"

For local development:

git clone https://github.com/Palo-IT-GitHub-Demos/lab-registry-mcp
cd lab-registry-mcp

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Configuration

There are 3 practical ways to configure the source registry.

1) GitHub source from GLOBAL-PALO-IT/gen-e2-marketplace (recommended when you have access)

Use this when you can obtain a GitHub token with access to the official marketplace repository.

export REGISTRY_GITHUB_REPO=GLOBAL-PALO-IT/gen-e2-marketplace
# optional but usually needed for private repo access
export REGISTRY_GITHUB_TOKEN=ghp_...

2) GitHub source from your own fork (temporary workaround)

Use this when access to the official repo token is difficult, but you can fork the marketplace into a personal or easier-to-access repository.

export REGISTRY_GITHUB_REPO=<your-user-or-org>/gen-e2-marketplace
export REGISTRY_GITHUB_TOKEN=ghp_...

3) Local source from a clone of gen-e2-marketplace

Use this for offline development, local debugging, or local integration/E2E tests.

export REGISTRY_PATH=/abs/path/to/gen-e2-marketplace
# or copy .env.example → .env and set it there

Client setup

Both Claude Code and Copilot use the same stdio server; only the client registration format changes.

Claude Code CLI — user-level

claude mcp add lab-registry --scope user \
  -e REGISTRY_GITHUB_REPO=GLOBAL-PALO-IT/gen-e2-marketplace \
  -e REGISTRY_GITHUB_TOKEN=ghp_... \
  -- /abs/path/to/.venv/bin/mcp run /abs/path/to/src/lab_registry/server.py

If you use a fork or a local clone, replace the env vars accordingly.

GitHub Copilot agent mode — ~/Library/Application Support/Code/User/mcp.json

{
  "servers": {
    "lab-registry": {
      "type": "stdio",
      "command": "/abs/path/to/.venv/bin/mcp",
      "args": ["run", "/abs/path/to/src/lab_registry/server.py"],
      "env": {
        "REGISTRY_GITHUB_REPO": "GLOBAL-PALO-IT/gen-e2-marketplace",
        "REGISTRY_GITHUB_TOKEN": "ghp_..."
      }
    }
  }
}

For local mode, replace the env block with:

{
  "REGISTRY_PATH": "/abs/path/to/gen-e2-marketplace"
}

Run

# Visual debug UI (MCP Inspector at http://localhost:6274)
mcp dev src/lab_registry/server.py

# Stdio (for client config)
REGISTRY_GITHUB_REPO=owner/repo REGISTRY_GITHUB_TOKEN=ghp_... mcp run src/lab_registry/server.py

# Unit + integration + E2E tests
REGISTRY_PATH=../gen-e2-marketplace pytest tests/ -q

The 15 tools

Response shapes: list_entries, search_entries, and suggest_entries use a lean serialization — only populated fields are returned (no null or empty-list noise). get_entry always returns the full entry shape.

Tool selection guide

Goal

Use

Discover which plugins fit a project type

suggest_plugins

Exact keyword or partial name (e.g. "tdd", "android")

search_entries

Natural language task description (e.g. "I need to review architecture")

suggest_entries

Browse by type or plugin

list_entries with filters

Install a full plugin (all artefacts + paths)

get_plugin_install_package

Read one specific artefact

get_entry or get_entry_by_id

Check installed plugins are up to date (one plugin)

check_compliance_plugin

Check installed plugins are up to date (multiple)

discover plugin.json → check_compliance

See what changed in a plugin

get_changelog

list_entries

List all registry entries. Returns a flat list of RegistryEntry objects.

Parameter

Type

Description

type

string?

Filter: "skill", "agent", "command", or "hook"

plugin

string?

Filter by plugin name (e.g. "android")

tags

string[]?

Filter by keywords — OR match (any tag must match)

// Example: all skills in the android plugin
{ "type": "skill", "plugin": "android" }

search_entries

Keyword search over name, description, and plugin name. Name matches are ranked above description matches.

Parameter

Type

Description

query

string

Search term

type

string?

Optional type filter

{ "query": "architecture", "type": "skill" }

suggest_entries

Task-oriented suggestion tool. Splits the task into individual terms and scores entries by how many terms appear in their name, description, plugin name, and tags.

Use for natural language queries at the artefact level. For plugin-level discovery ("which plugins fit my project?"), use suggest_plugins instead. For exact keyword matching, use search_entries.

Parameter

Type

Description

task

string

Natural language description of what you need

type

string?

Optional type filter

limit

integer?

Maximum number of results (default 5)

{ "task": "I need to write tests for a Go service", "type": "skill", "limit": 5 }

suggest_plugins

Plugin-level discovery. Scores plugins by how many task words appear in their name (3× weight), description, and tags.

Use this before suggest_entries when the user describes their project type and wants to know which plugins are most relevant — rather than listing all 15 plugins flat.

Parameter

Type

Description

task

string

Natural language description of the project or need

limit

integer?

Maximum number of results (default 5)

{ "task": "I'm building an Android app", "limit": 3 }

Example response: android, delivery, architecture-reviewer — each with score and matched_terms.


get_entry

Fetch the full content of a specific entry. Returns structured metadata and the raw markdown body.

Parameter

Type

Description

plugin

string

Plugin name

type

string

Artifact type

name

string

Artifact name

{ "plugin": "android", "type": "skill", "name": "android-architecture" }

Response shape:

{
  "entry":          { "id": "android/skill/android-architecture", "plugin_version": "0.1.0", ... },
  "metadata":       { "name": "android-architecture", "description": "..." },
  "content_raw":    "# Android architecture (project delta)\n\n...",
  "content_full":   "---\nname: android-architecture\n---\n# Android architecture...\n",
  "install_targets": {
    "claude_local":    ".claude/skills/android-architecture/SKILL.md",
    "copilot":         ".github/skills/android-architecture/SKILL.md",
    "plugin_tracking": ".claude/plugins/android/plugin.json"
  }
}

content_full is the verbatim source file (frontmatter + body) — write it directly to install_targets.claude_local or install_targets.copilot without any reconstruction.


get_entry_by_id

Fetch one entry directly from its canonical ID. Returns the same shape as get_entry: entry, metadata, content_raw, content_full, and install_targets.

Parameter

Type

Description

id

string

Entry ID in plugin/type/name format

{ "id": "android/skill/android-architecture" }

get_plugin

All entries for one plugin, plus its manifest.

Parameter

Type

Description

plugin

string

Plugin name

{ "plugin": "research-suite" }

Response: { "manifest": { "version": "1.0.1", ... }, "entries": [...] }


list_plugins

List all indexed plugins with version and per-type entry counts.

Response includes plugin-level summary fields such as version, updated_at, and counts for skills, agents, commands, and hooks.


get_changelog

Return the raw CHANGELOG.md content for a plugin.

Parameter

Type

Description

plugin

string

Plugin name

{ "plugin": "delivery" }

get_marketplace_stats

Return marketplace-level statistics: totals, counts by type, counts by plugin, and latest update information.

Includes last_updated (most recent date across all entries) and last_updated_plugin (name of the plugin that was updated most recently).

Useful for dashboards, summaries, and quick health checks.


check_compliance

Check whether locally installed gen-e2 plugin artefacts are up to date with the registry.

For a single plugin, use check_compliance_plugin instead — it requires only the plugin name and local version, without listing artefacts manually.

Recommended workflow for multiple plugins: discover local plugin.json files, read the version field from each, build the entries list, then call this tool.

Each item in entries must have name, type, plugin, and local_version.

{
  "entries": [
    { "name": "research",   "type": "skill", "plugin": "research-suite", "local_version": "0.8.0" },
    { "name": "coi-verify", "type": "skill", "plugin": "research-suite", "local_version": "0.8.0" }
  ]
}

Response:

{
  "outdated": [{ "name": "research", "plugin": "research-suite", "local_version": "0.8.0", "registry_version": "1.0.1" }],
  "unknown":  [],
  "up_to_date_count": 0
}

outdated = version mismatch. unknown = not found in registry.


check_compliance_plugin

Shortcut: check all artefacts of a plugin against a single local version in one call.

Equivalent to calling get_plugin to list artefacts, then check_compliance with each one. Use this when you have a plugin.json with one version field — it removes the need to enumerate artefacts manually.

Parameter

Type

Description

plugin

string

Plugin name

local_version

string

Version from the local plugin.json

{ "plugin": "research-suite", "local_version": "0.8.0" }

Returns the same shape as check_compliance: outdated, unknown, up_to_date_count.

Validate a skill, agent, or command markdown file structure against the expected schema.

Typical output includes:

  • valid

  • errors

  • warnings

  • parsed frontmatter when available

Useful before contributing a new artefact to the marketplace.


get_plugin_install_package

Return a complete install package for a plugin — one call, everything needed to install.

Parameter

Type

Description

plugin

string

Plugin name

{ "plugin": "implementation-plan" }

Response shape:

{
  "plugin": { "name": "implementation-plan", "version": "0.1.0", ... },
  "files": [
    {
      "id": "implementation-plan/skill/create-implementation-plan",
      "type": "skill",
      "name": "create-implementation-plan",
      "content_full": "---\nname: create-implementation-plan\n---\n...",
      "install_targets": {
        "claude_local":    ".claude/skills/create-implementation-plan/SKILL.md",
        "copilot":         ".github/skills/create-implementation-plan/SKILL.md",
        "plugin_tracking": ".claude/plugins/implementation-plan/plugin.json"
      }
    }
  ],
  "plugin_tracking": {
    "path":    ".claude/plugins/implementation-plan/plugin.json",
    "content": "{\"name\": \"implementation-plan\", \"version\": \"0.1.0\", ...}"
  }
}

Prefer this over multiple get_entry calls when installing a full plugin. Each file in files has content_full (write-ready) and install_targets (exact paths per client).


reload_registry

Force reload the in-memory cache from its source (GitHub or local). Use after a marketplace update to get fresh data without restarting the server.

Response: { "added": [...], "removed": [...], "modified": [...], "total": N }


Usage examples

These are natural-language prompts validated against the live registry.

1) Discover what exists

What gen-e2 plugins are available and which was updated most recently?

Typical tools used: get_marketplace_stats (returns last_updated_plugin) + list_plugins


2) Find by type

What gen-e2 agents are available in the registry?

Typical tools used: list_entries with type="agent"


Search the gen-e2 registry for skills related to architecture review.

Typical tools used: suggest_entries with a task description


4) Get documentation and install files

Get the full documentation and install files for the gen-e2 delivery plugin.

Typical tools used: get_plugin_install_package — returns all artefacts with content_full + install_targets in one call


5) Install a plugin into the current project

Install the gen-e2 implementation-plan plugin into my project for both Claude Code and GitHub Copilot.

Typical tools used: get_plugin_install_package → write each file.content_full to file.install_targets.claude_local and file.install_targets.copilot


6) Check for outdated plugins

Check if my locally installed gen-e2 plugins are up to date with the registry.

Typical tools used: discover .claude/plugins/*/plugin.json → check_compliance → get_changelog for outdated entries


7) Read one entry

Get the full content of android/skill/android-architecture

Typical tools used: get_entry_by_id


8) Validate a new contribution

Validate this new skill markdown file against the gen-e2 schema

Typical tools used: validate_entry


9) Refresh cache after marketplace updates

Reload the gen-e2 registry and tell me what changed

Typical tools used: reload_registry


Registry coverage

Current state of gen-e2-marketplace as indexed:

Plugin

Version

Skills

Agents

Commands

Hooks

android

0.1.0

14

9

9

1

architecture-reviewer

0.1.0

4

1

0

0

delivery

0.2.3

5

1

0

0

figma-design-to-code

0.1.0

1

0

0

0

fortran77-explainer

0.1.0

0

1

0

0

go-tdd-orchestrator

0.1.0

2

3

0

0

html-planner-and-presentation

0.1.0

3

0

0

0

html-presentation

0.1.0

1

0

0

0

implementation-plan

0.1.0

1

0

0

0

kotlin-and-kotlin-multiplatform

0.1.0

4

0

0

0

migration-implementation-plan

0.1.0

1

0

0

0

research-suite

1.0.1

2

0

0

0

swift5-development-test-writer

0.1.0

2

0

0

0

Total

40

15

9

1

65 artefacts indexed across 13 plugins when reading from GLOBAL-PALO-IT/gen-e2-marketplace.

dev-workflow exists in a local clone of the marketplace but is not published to the shared GitHub repository — it is excluded from the counts above. updated_at is null for plugins without a CHANGELOG.md.


Tests

With RUN_NL_TESTS unset, pytest --collect-only -q collects 193 tests. The NL dispatch module is excluded unless RUN_NL_TESTS=1 and its Ollama health check succeeds.

Test level

Setup

Command

Measured result

Unit, contract, and mocked GitHub

No environment variables

pytest tests/ -q

158 passed, 36 skipped; integration/E2E and NL are skipped

Integration and E2E

REGISTRY_PATH points to a local marketplace

REGISTRY_PATH=../gen-e2-marketplace pytest tests/ -q

193 passed, 1 skipped; NL module is skipped

NL dispatch

RUN_NL_TESTS=1, REGISTRY_PATH, and healthy Ollama

RUN_NL_TESTS=1 REGISTRY_PATH=../gen-e2-marketplace pytest tests/test_nl_dispatch.py -v -m nl_dispatch

Optional; excluded from the default collection

The standard summary's 36 skips are 35 individual integration/E2E cases plus one module-level NL skip; that module adds no test item to the 193 collected tests.

The standard profile uses a temporary fixture and mocked GitHub HTTP; it does not require network access. The local-registry profile adds real marketplace integration and MCP subprocess scenarios. NL dispatch uses Ollama only after the explicit opt-in and a successful 500 ms /api/tags health check.


Known limitations

  • No per-artifact versioning — version is at plugin level; a plugin bump marks all its artefacts as outdated even if only one changed

  • No deprecated detection — no deprecated flag in the source format

  • updated_at is best-effort — parsed from CHANGELOG.md; null if absent

  • Cache on demand — use reload_registry tool to refresh without restarting the server

  • Hooks indexed one entry per plugin — not per event type

Available Tools

15 tools
check_complianceA

Check whether locally installed gen-e2 plugin artefacts are up to date with the registry.

Use this whenever the user asks to verify, check, or audit their installed gen-e2 plugins. Workflow: discover local plugin.json files (e.g. .claude/plugins/*/plugin.json), read the version field from each, then call this tool — do NOT compare versions manually.

Each item in entries must have:

  • name: artifact name (e.g. "research", "commit-push-pr")

  • type: "skill", "agent", "command", or "hook"

  • plugin: plugin name (e.g. "research-suite", "delivery")

  • local_version: version read from the local plugin.json (e.g. "0.8.0")

Returns:

  • outdated: entries where local_version != current registry version (includes registry_version)

  • unknown: entries not found in the registry

  • up_to_date_count: number of entries that match the registry

NameRequiredDescriptionDefault
entriesYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It explains the core workflow (discover local files, read versions, compare) and the return structure (outdated, unknown, up_to_date_count). However, it does not mention side effects (likely none), authentication needs, or error handling. The description is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then provides usage guidance, workflow, parameter details, and return structure. It is well-structured and each sentence adds value. Slightly verbose but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the output schema is present (context signals indicate true), and the description explains return values in detail. It covers the tool's behavior adequately. Minor omissions like empty input handling or error conditions are acceptable for a read-only compliance check.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter (entries) with 0% description coverage. The description compensates by detailing the required fields for each entry (name, type, plugin, local_version) and providing examples. This adds significant meaning beyond the schema, which only specifies an array of objects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks locally installed gen-e2 plugin artifacts against the registry for updates. It uses specific verbs ('Check') and resources ('gen-e2 plugin artefacts'), and the purpose is distinct from sibling tools which are for retrieval or validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool ('whenever the user asks to verify, check, or audit'), and provides a workflow including the instruction to not compare versions manually. It does not mention when not to use it or list alternatives, but the guidance is clear and helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_compliance_pluginA

Check all artefacts of a gen-e2 plugin against a single local version.

Use this when you have a plugin.json with one version field and want to verify the whole plugin in one call, instead of listing artefacts manually and calling check_compliance with each one.

Typical workflow:

  1. Read .claude/plugins//plugin.json → get local version

  2. Call check_compliance_plugin(plugin=, local_version=)

Returns the same shape as check_compliance:

  • outdated: artefacts where local_version != registry version (includes registry_version)

  • unknown: artefacts not found in the registry

  • up_to_date_count: number of matching artefacts

NameRequiredDescriptionDefault
pluginYes
local_versionYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries full burden. It describes the return shape (same as check_compliance with outdated, unknown, up_to_date_count), implying read-only behavior, but does not explicitly state safety, authorization needs, rate limits, or side effects. The description is adequate but lacks explicit behavioral guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact with three concise paragraphs: a clear first line, a usage guideline paragraph with workflow, and a return shape paragraph. No fluff, every sentence adds value, and it is well-structured for quick reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which explains return values), the description covers purpose, usage, differentiation, and return shape. It lacks explicit mention of error cases or prerequisites (e.g., plugin must exist in registry), but overall it is sufficiently complete for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so the description must compensate. It mentions 'local version' and 'plugin.json with one version field' in the workflow, linking 'plugin' to a plugin name and 'local_version' to a version string for comparison. However, it does not detail format constraints (e.g., semver) or validation rules, providing only partial semantic enrichment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Check all artefacts of a gen-e2 plugin against a single local version', specifying the verb 'check', the resource 'artefacts of a plugin', and distinguishes from sibling 'check_compliance' by noting it performs batch verification instead of manual per-artefact calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this when you have a plugin.json with one version field and want to verify the whole plugin in one call, instead of listing artefacts manually and calling check_compliance with each one.' Provides a typical workflow with steps, giving clear context for when and how to use this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_changelogA

Get the full CHANGELOG.md content for a plugin.

Useful after check_compliance signals an outdated entry — shows what changed between versions without leaving the MCP context.

Returns:

  • plugin: plugin name

  • version: current version

  • changelog_raw: full CHANGELOG.md text (null if absent)

NameRequiredDescriptionDefault
pluginYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It describes the return values (plugin, version, changelog_raw with null case), offering good insight into behavior. No side effects noted, but as a read operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise, front-loaded with the main purpose, then usage hint, then return fields. No unnecessary words, well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, read operation), the description covers the purpose, usage context, and return structure. With an output schema present, it provides sufficient completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'plugin' is a string; the description does not add meaning beyond the schema property name. Schema coverage is 0%, but the parameter is self-explanatory. Score reflects adequate but not enhanced sematics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Get the full CHANGELOG.md content for a plugin', providing a specific verb and resource. While it doesn't explicitly distinguish from siblings, the mention of being useful after check_compliance hints at differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete usage scenario: 'Useful after check_compliance signals an outdated entry.' It implies when to use but lacks explicit exclusions or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entryA

Get a specific registry entry with its full content.

Use this ONLY when you already know the exact plugin, type, AND name of the artefact. If you only have a task description or keyword, use suggest_entries or search_entries instead to discover the right artefact first. To get all artefacts of a plugin at once, use get_plugin_install_package instead.

Returns:

  • entry: structured RegistryEntry fields

  • metadata: parsed YAML frontmatter from the source file

  • content_raw: markdown body below the frontmatter (the actual instructions)

  • content_full: verbatim file content (frontmatter + body), write-ready

  • install_targets: exact destination paths per client (claude_local, copilot, plugin_tracking)

NameRequiredDescriptionDefault
nameYes
typeYes
pluginYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose what comes back, including the important distinction that content_full is verbatim and 'write-ready' while content_raw is body-only, and that install_targets are per-client destination paths. It stops short of stating failure behavior (e.g., what happens when the entry doesn't exist) or whether lookups are cached/permission-gated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical constraint is front-loaded in the first line and reinforced in caps, followed by the routing alternatives, then a scannable bulleted return list. Every line serves either selection or interpretation; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the return-value bullets are supplementary rather than required, and they still add interpretive value for similarly named fields. For a 3-required-param read tool the definition is close to complete; only the accepted values for 'type' and the not-found case are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does partially by framing the three required params as a compound identity key (plugin + type + name). However it never explains what values 'type' accepts (no enum exists) or how 'plugin' resolves, leaving the most error-prone parameter underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get a specific registry entry with its full content') and immediately scopes it as a lookup by exact identity. It is clearly distinguishable from sibling discovery tools like suggest_entries and search_entries, and from the bulk get_plugin_install_package.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the precondition ('ONLY when you already know the exact plugin, type, AND name') and names two alternatives for the keyword/task case plus a third for bulk retrieval. The agent has a complete routing decision without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entry_by_idA

Get a registry entry by its full ID (plugin/type/name).

Shortcut for get_entry when you already have the entry ID from list_entries. Returns same shape as get_entry: {entry, metadata, content_raw}.

Example: id="android/skill/android-architecture"

NameRequiredDescriptionDefault
idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions return shape and gives an example, but doesn't explicitly state read-only nature, error cases, or authorization. Adequate but could be more thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each serving a purpose: description, usage guidance, return shape, example. No redundant text. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simplicity (one parameter, output schema exists), description covers purpose, usage, return shape, and example. Doesn't mention error handling or performance, but sufficient for the tool's scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'id' has no description in the input schema (0% coverage). The description compensates fully by explaining the format ('plugin/type/name') and providing an example, making it easy for an agent to construct valid input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a registry entry by its full ID, distinguishing it from get_entry by noting it's a shortcut when you already have the ID from list_entries. The verb 'get' and resource 'entry' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Shortcut for get_entry when you already have the entry ID from list_entries,' providing clear context on when to use this tool over alternatives. Does not state when not to use, but implication is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_marketplace_statsB

Get a dashboard overview of the entire registry.

Returns:

  • total_entries, total_plugins

  • by_type: entry counts per artifact type

  • by_plugin: per-plugin breakdown with version and counts

  • last_updated: most recent CHANGELOG date across all plugins

  • plugins_without_changelog: plugins missing a CHANGELOG.md

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description fails to disclose behavioral traits such as read-only status, authentication requirements, or rate limits. It only enumerates return fields, leaving the agent uninformed about side effects or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise, with a clear purpose sentence followed by a bulleted list of return fields. It front-loads the key verb and resource. Minor improvement could be made by grouping related output fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, the description explains return values adequately. However, it lacks usage context (when to call) and does not mention that results reflect the entire registry, which is a significant omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so no additional meaning is required. The description implicitly conveys that no filters are needed, which is adequate for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'dashboard overview of the entire registry'. This distinguishes it from sibling tools like get_entry and list_entries, which focus on specific entries or lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like list_entries or get_plugin. It only lists return fields without specifying context (e.g., 'Use for high-level registry statistics').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pluginC

Get all registry entries for a plugin, plus its manifest.

Returns:

  • manifest: Plugin metadata (name, version, description, tags)

  • entries: list of all RegistryEntry objects in the plugin

NameRequiredDescriptionDefault
pluginYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the return structure (manifest plus list of entries), which provides behavioral insight beyond the input schema. However, with no annotations, it omits details like auth requirements, rate limits, or potential side effects, which are moderate gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (two lines for purpose, then bullet points for output). Every sentence adds value, and the structure is easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and an output schema, the description covers the return structure but misses parameter semantics and usage context. It is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fails to explain the 'plugin' parameter at all. It does not specify whether this is a name, ID, or slug, leaving the agent guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves 'all registry entries for a plugin plus its manifest.' The verb 'get' and noun 'plugin' are specific, but it does not differentiate from sibling tools like 'get_entry' or 'list_entries'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as 'get_entry', 'get_entry_by_id', or 'list_plugins'. The description lacks any situational context or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_plugin_install_packageA

Get full documentation AND install-ready files for an entire plugin in one call.

Use this whenever the user wants to:

  • install a plugin into their project

  • get the documentation and install files for a plugin

  • know where to place a plugin's artefacts in their project

Returns all artefacts with:

  • content_full: verbatim file content (frontmatter + body), write-ready — use this to write the file directly without any reconstruction

  • install_targets: exact destination paths per client: claude_local → .claude/skills|agents|commands/{name}/... copilot → .github/skills|agents|prompts/{name}/... plugin_tracking → .claude/plugins/{plugin}/plugin.json

  • plugin_tracking: the plugin.json content to write for compliance tracking

Prefer this over multiple get_entry calls when working with a full plugin.

NameRequiredDescriptionDefault
pluginYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes return fields (content_full, install_targets, plugin_tracking) and their usage details. Does not cover auth or side effects, but for a read-like tool the output description is thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and front-loaded purpose. It is fairly long but each sentence adds value. Could be slightly tighter but overall efficient for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter, no annotations, and presence of output schema, the description provides sufficient context: what the tool returns and how to interpret it. It lacks error handling or prerequisites, but is largely complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter 'plugin'. The description does not elaborate on its format or constraints beyond the tool context. It relies on the parameter name and tool purpose to convey meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose: 'Get full documentation AND install-ready files for an entire plugin in one call.' It distinguishes from siblings like get_entry by noting this is for full plugins vs individual entries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear when-to-use scenarios: 'install a plugin... get the documentation and install files... know where to place artefacts.' Also explicitly suggests preferring this over multiple get_entry calls, offering an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_entriesA

List registry entries, optionally filtered by type, plugin, or tags.

Use type="agent" to list agents, type="skill" to list skills, type="command" to list commands, type="hook" to list hooks. Omit all filters to list every entry in the registry.

Filter by:

  • type: "skill", "agent", "command", or "hook"

  • plugin: plugin name (e.g. "android", "delivery", "research-suite")

  • tags: list of keywords (OR match — any tag must match)

NameRequiredDescriptionDefault
tagsNo
typeNo
pluginNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'List' implies a safe read, but the description never states that explicitly and says nothing about result size, pagination, or ordering for a registry that may hold many entries. Adequate but with real gaps for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then the type shortcut, then per-parameter detail in a scannable structure. The four type values are listed twice (inline sentence and 'Filter by' bullet), a small redundancy that costs a little efficiency without hurting clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers all three optional filters including their semantics. What is missing is routing relative to siblings like search_entries and suggest_entries, which is the one thing an agent would still have to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it supplies the allowed type values (skill, agent, command, hook), concrete plugin name examples, and the non-obvious OR-match semantics for tags. The only shortfall is that type is typed as a free string in the schema while the description implies a closed set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List registry entries') and enumerates the four entry types it can return, so the agent knows exactly what comes back. It never names a sibling, so an agent cannot tell from the description alone why it should prefer this over search_entries or suggest_entries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Omit all filters to list every entry in the registry' gives one clear usage condition, and the type examples show the common invocation. However, there is no guidance on when to use this instead of search_entries, suggest_entries, or list_plugins, which is the real ambiguity given the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pluginsA

List all plugins with version, description, and entry counts per type.

Returns one entry per plugin sorted alphabetically, with:

  • name, version, description, tags, author

  • entry_counts: {skill, agent, command, hook, total}

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the return structure (sorted, alphabetical, fields including entry_counts). It lacks mention of performance or state implications, but for a read-only list, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-loading the purpose and listing output fields. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even with an output schema, the description fully covers returned data, sorting, and entry_counts structure. No gaps given zero parameters and simple semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters (schema coverage 100%), baseline 4. The description adds value by detailing output fields and nested structure, compensating for lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all plugins with version, description, and entry counts per type. It specifies sorted order and explicit fields, distinguishing it from siblings like list_entries (entries vs plugins) and get_plugin (single vs all).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied for listing all plugins, but no explicit guidance on when to use vs alternatives (e.g., search_entries, get_plugin) or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reload_registryA

Force reload the registry from its source (GitHub or local path).

Clears the in-memory cache and re-fetches all entries. Use after a marketplace update (git pull / new commit) to get fresh data without restarting the server.

Returns a diff vs the previous state:

  • added: entry IDs new in this reload

  • removed: entry IDs no longer present

  • modified: entry IDs whose plugin_version changed

  • total: total number of entries after reload

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses key behavioral traits: clears in-memory cache, re-fetches all entries, and returns a diff of added/removed/modified IDs. While it doesn't discuss performance or authorization, the side effect and return format are well explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: a one-sentence purpose, a usage guideline sentence, and a bullet list for return details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter complexity and the presence of an output schema (evidenced by context signal), the description is complete. It covers purpose, usage, side effects, and return format in detail, leaving no significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the description does not need to add parameter semantics. Baseline 4 is appropriate since the schema coverage is 100% and there are no properties to describe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear action statement: 'Force reload the registry from its source (GitHub or local path).' It specifies the resource and the verb, clearly distinguishing this tool from listing and search siblings, which do not reload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'Use after a marketplace update (git pull / new commit) to get fresh data without restarting the server.' It does not mention when not to use or alternatives, but the context is clear enough for an AI agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_entriesA

Search registry entries by exact keyword or partial name match.

Searches name, description, and plugin name. Name matches are ranked before description matches. Optionally restrict results to a specific type.

Use this when you have a specific keyword or partial name (e.g. "tdd", "android", "architecture"). For natural language task descriptions, use suggest_entries instead.

NameRequiredDescriptionDefault
typeNo
queryYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description details search behavior: fields searched, ranking logic, and type restriction. However, it does not explicitly state that it is read-only or mention any potential side effects, which would be expected for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with five sentences, front-loading the core action and efficiently providing key details without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers input behavior, ranking, and type restriction adequately. With an output schema present, the description need not explain return values. However, it omits potential details like pagination or ordering beyond ranking, which are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It describes 'query' as an exact keyword or partial name and mentions optional type restriction, but lacks specifics on 'type' values or query format details (e.g., case sensitivity). Adds meaning but could be more comprehensive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches registry entries by exact or partial name, matching against name, description, and plugin name, with ranking and optional type restriction. It distinguishes itself from the 'suggest_entries' sibling, making purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (specific keyword or partial name) and when not to (natural language tasks, suggesting 'suggest_entries' instead), providing clear guidance with examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_entriesA

Suggest registry entries relevant to a natural language task description.

Use this when you do NOT have a specific artefact name — only a task or intent description. It scores entries by term overlap and returns ranked suggestions. If you already know the exact plugin+type+name, use get_entry instead. For exact keyword or partial name matching, use search_entries instead.

Examples: "I need to review architecture and create ADRs", "write tests for a Go service", "build an Android feature with MVVM".

  • task: natural language description of what you need

  • type: optional type filter ("skill", "agent", "command", "hook")

  • limit: max results to return (default 5)

NameRequiredDescriptionDefault
taskYes
typeNo
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the ranking mechanism ('scores entries by term overlap and returns ranked suggestions'), which tells the agent results are heuristic rather than exhaustive. It stops short of disclosing pagination behavior, auth requirements, or what happens on a no-match task, so it's strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then usage routing, then a bulleted parameter reference. The three example tasks earn their space by illustrating the expected natural-language input format. No redundant or filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape needn't be explained, and the description covers the remaining gaps: purpose, selection criteria, alternatives, and all three parameters with their values and defaults. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does, documenting all three parameters plus details the schema omits: the candidate values for 'type' ("skill", "agent", "command", "hook") and the default of 5 for 'limit'. The task parameter's expected shape is shown via the sample intents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (suggest) and resource (registry entries) scoped to natural language task descriptions, and explicitly distinguishes itself from two named siblings, get_entry and search_entries. An agent can tell exactly what this tool returns (ranked suggestions) versus the exact-match alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the prerequisite condition ('when you do NOT have a specific artefact name — only a task or intent description') and names the two alternatives with the condition that selects each: get_entry for exact plugin+type+name, search_entries for exact keyword/partial matching. Concrete example tasks reinforce the intended input style.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_pluginsA

Suggest gen-e2 plugins relevant to a natural language task or project description.

Use this for plugin-level discovery when the user describes their project or use case and wants to know which plugins are most relevant — before drilling into individual artefacts with suggest_entries.

Scores plugins by how many task words appear in their name (3x weight), description, and tags. Returns plugins sorted by relevance score.

Examples:

  • "I'm building an Android app" → android, delivery, architecture-reviewer

  • "I need to research and document a technical decision" → research-suite, delivery

  • "Go microservice with TDD" → go-tdd-orchestrator

  • task: natural language description of the project or need

  • limit: max results to return (default 5)

NameRequiredDescriptionDefault
taskYes
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully bears the burden. It explains the scoring mechanism (word matching with 3x weight on plugin names), sorting by relevance, and gives examples. This provides comprehensive insight into the tool's behavior without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose, usage guidelines, behavioral details, examples, and parameter definitions. Every sentence adds value without repetition, and it remains concise while covering all essential aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (2 parameters, one required) and the presence of an output schema (not shown but noted), the description provides complete contextual information. It explains when to use it, how it works, and what parameters are needed, leaving no critical gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds necessary meaning: 'task: natural language description of the project or need' and 'limit: max results to return (default 5)'. This is helpful but could be slightly more detailed about the task format or limit constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool's function: 'Suggest gen-e2 plugins relevant to a natural language task or project description.' Uses a specific verb (suggest) and resource (plugins), and distinguishes from the related sibling 'suggest_entries' by emphasizing plugin-level discovery before drilling into individual artefacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use the tool: 'Use this for plugin-level discovery when the user describes their project or use case and wants to know which plugins are most relevant — before drilling into individual artefacts with suggest_entries.' Also provides examples of typical inputs and outputs, giving clear context for appropriate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_entryA

Validate a skill/agent/command markdown file against the marketplace schema.

Checks required fields, recommended fields, body content, and naming conventions.

  • content: full file content including YAML frontmatter

  • type: "skill", "agent", "command", or "hook"

Returns:

  • valid: bool

  • errors: blocking schema violations

  • warnings: non-blocking recommendations

  • parsed: the parsed YAML frontmatter

NameRequiredDescriptionDefault
typeYes
contentYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description adequately conveys that this tool performs read-only validation with no side effects. It lists return values but does not explicitly state non-destructive behavior, though it is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct, using bullet points for parameters and return values. No redundant information; every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, parameters, and return format comprehensively. Given no output schema, including the return structure is beneficial. Minor omissions like error handling do not detract significantly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the schema by explaining the content parameter as full file content with YAML frontmatter and listing allowed values for type (skill, agent, command, hook). With 0% schema coverage, this compensation is effective.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it validates a skill/agent/command markdown file against a marketplace schema, specifying the types of files and checks performed. It distinguishes from siblings by focusing on validation, unlike tools like get_entry or check_compliance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for pre-submission validation, but does not explicitly contrast with siblings like check_compliance. No alternative tool comparisons are provided, so usage context is implied only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.3.0
    • Addedcheck_compliance_plugin
    • Addedsuggest_plugins
  2. 13 tool updatesv0.2.0
    • First observedcheck_compliance
    • First observedget_changelog
    • First observedget_entry
    • First observedget_entry_by_id
    • First observedget_marketplace_stats
    • First observedget_plugin
    • First observedget_plugin_install_package
    • First observedlist_entries
    • First observedlist_plugins
    • First observedreload_registry
    • First observedsearch_entries
    • First observedsuggest_entries
    • First observedvalidate_entry

TDQS

A3.9/5.0

Scored across 15 tools

Disambiguation4/5

Most tools target distinct operations (list/search/suggest entries vs plugins, compliance, validation, reload), and descriptions explicitly cross-reference when to use alternatives. However, several near-duplicate pairs exist (get_entry vs get_entry_by_id, get_plugin vs get_plugin_install_package, check_compliance vs check_compliance_plugin) that could be misselected despite the guidance.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun or noun pattern (get_* , list_*, check_*, search_*, suggest_*, reload_*, validate_*). No camelCase mixing or vague verbs; the longest names still conform to the same convention.

Tool Count4/5

15 tools sit at the top of the well-scoped range and each maps to a plausible registry operation. A few are convenience wrappers (get_entry_by_id, check_compliance_plugin) that slightly inflate the count, but nothing feels gratuitous.

Completeness5/5

The surface covers the full lifecycle of a read-only marketplace: discovery (list/search/suggest for both entries and plugins), retrieval (entries, plugins, install packages), compliance checking, changelog, stats, schema validation, and cache reload. No obvious operational gaps remain for the agent's workflows.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to discover, install, and manage SKILL.md skills from a Git-backed registry via MCP tools for search, install, and list operations.
    18 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Discovers and manages portable agent capabilities (skills and MCP servers) from configurable collections, providing search, inspection, and local installation via CLI and MCP tools.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables managing a canonical library of agent skills and MCP servers, syncing them across multiple development harnesses, and adding, importing, or configuring them through MCP tools.
    218 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP hosts to discover, browse, and load Agent Skills from one or many SKILL.md libraries over the Model Context Protocol, with namespaced libraries, search/list/get tools, progressive disclosure, and a digest-verified pull client for syncing skills to disk.
    7
    1
    MIT