Lab Registry Server
Discover, search, fetch, install, and validate Gen-e2 plugins and artefacts from the Lab Registry via any MCP-compatible client.
List registry entries with filters for type, plugin, and tags.
Search entries by exact keyword or partial name.
Suggest entries or plugins from natural-language task/project descriptions.
Fetch full entry content, metadata, and install targets (Claude Code, Copilot).
Get plugin manifests, changelogs, marketplace stats, and per-plugin entry counts.
Check installed plugin artefacts for outdated or unknown versions.
Validate new skill/agent/command markdown files against the marketplace schema.
Reload the in-memory registry cache after marketplace updates and see diffs.
Install entire plugins with write-ready content and client-specific destination paths.
Allows discovery and compliance checking of Android development skills, agents, commands, and hooks from the Gen-e2 Lab Registry.
Provides access to Figma design-related skills, agents, commands, and hooks from the Gen-e2 Lab Registry.
Enables the server to fetch and manage the registry data from a GitHub repository, including private repos with token authentication.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Lab Registry Serversearch for architecture skills in android plugin"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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_entryStartup sequence:
MCP client (Claude Code or Copilot) spawns the server process via stdio
Server responds to
initialize— no files read yetOn first tool call,
load_registry()reads from eitherREGISTRY_GITHUB_REPOorREGISTRY_PATH, parses marketplace metadata, indexes plugin entries, and extractsupdated_atfromCHANGELOG.mdwhen availableResult is cached in memory (
lru_cache) for the life of the processAll 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 thereClient 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.pyIf 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/ -qThe 15 tools
Response shapes:
list_entries,search_entries, andsuggest_entriesuse a lean serialization — only populated fields are returned (nonullor empty-list noise).get_entryalways returns the full entry shape.
Tool selection guide
Goal | Use |
Discover which plugins fit a project type |
|
Exact keyword or partial name (e.g. |
|
Natural language task description (e.g. |
|
Browse by type or plugin |
|
Install a full plugin (all artefacts + paths) |
|
Read one specific artefact |
|
Check installed plugins are up to date (one plugin) |
|
Check installed plugins are up to date (multiple) | discover |
See what changed in a plugin |
|
list_entries
List all registry entries. Returns a flat list of RegistryEntry objects.
Parameter | Type | Description |
|
| Filter: |
|
| Filter by plugin name (e.g. |
|
| 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 |
|
| Search term |
|
| 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 |
|
| Natural language description of what you need |
|
| Optional type filter |
|
| 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 |
|
| Natural language description of the project or need |
|
| 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 name |
|
| Artifact type |
|
| 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 |
|
| Entry ID in |
{ "id": "android/skill/android-architecture" }get_plugin
All entries for one plugin, plus its manifest.
Parameter | Type | Description |
|
| 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 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 name |
|
| Version from the local |
{ "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:
validerrorswarningsparsed 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 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"
3) Natural language search
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-architectureTypical tools used: get_entry_by_id
8) Validate a new contribution
Validate this new skill markdown file against the gen-e2 schemaTypical tools used: validate_entry
9) Refresh cache after marketplace updates
Reload the gen-e2 registry and tell me what changedTypical 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-workflowexists in a local clone of the marketplace but is not published to the shared GitHub repository — it is excluded from the counts above.updated_atisnullfor plugins without aCHANGELOG.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 |
| 158 passed, 36 skipped; integration/E2E and NL are skipped |
Integration and E2E |
|
| 193 passed, 1 skipped; NL module is skipped |
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
deprecatedflag in the source formatupdated_atis best-effort — parsed fromCHANGELOG.md;nullif absentCache on demand — use
reload_registrytool to refresh without restarting the serverHooks indexed one entry per plugin — not per event type
Available Tools
15 toolscheck_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
| Name | Required | Description | Default |
|---|---|---|---|
| entries | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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:
Read .claude/plugins//plugin.json → get local version
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
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | Yes | ||
| local_version | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| plugin | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| type | No | ||
| plugin | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| type | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.3.0- Added
check_compliance_plugin - Added
suggest_plugins
13 tool updates
v0.2.0- First observed
check_compliance - First observed
get_changelog - First observed
get_entry - First observed
get_entry_by_id - First observed
get_marketplace_stats - First observed
get_plugin - First observed
get_plugin_install_package - First observed
list_entries - First observed
list_plugins - First observed
reload_registry - First observed
search_entries - First observed
suggest_entries - First observed
validate_entry
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Agent-native registry to discover APIs, MCP servers and CLIs, with live health checks.
Registry of MCP servers, agent skills and plugins: search, filter, comments, likes, publish.
Search and discover Agent Skills from the skills.sh registry. Powered by HAPI MCP server.
Discover and inspect public Runx skills before installing them. This read-only hosted MCP exposes search_skills and get_skill. The Apache-2.0 Rust runtime executes skills locally with scoped authority, approval gates and signed receipts. Docs: https://runx.ai/docs/mcp.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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 npm2MIT
- AlicenseNot gradedqualityDmaintenanceDiscovers and manages portable agent capabilities (skills and MCP servers) from configurable collections, providing search, inspection, and local installation via CLI and MCP tools.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- AlicenseAqualityBmaintenanceEnables 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.71MIT