Lab Registry Server
The Lab Registry Server is an MCP server providing comprehensive access to the gen-e2 Lab Registry for discovering, retrieving, installing, validating, and managing plugins and artefacts (skills, agents, commands, and hooks).
Discovery & Search
list_entries— Browse all registry artefacts, filtered by type, plugin name, or tagssearch_entries— Keyword/partial-name search across artefact names, descriptions, and plugin namessuggest_entries— Natural language task-based suggestions ranked by relevancesuggest_plugins— Plugin-level discovery from a natural language project descriptionlist_plugins— List all plugins with versions, descriptions, and per-type artefact counts
Fetching Content
get_entry/get_entry_by_id— Fetch full content of a specific artefact (metadata, markdown body, and install paths)get_plugin— Retrieve all artefacts and the manifest for an entire pluginget_plugin_install_package— Get write-ready file content and exact install paths for every artefact in a plugin in a single callget_changelog— Fetch the rawCHANGELOG.mdfor any plugin
Compliance & Validation
check_compliance— Check whether multiple locally installed artefacts are up to date with the registrycheck_compliance_plugin— Check all artefacts of a single plugin against a local version in one callvalidate_entry— Validate a skill/agent/command markdown file against the marketplace schema, returning errors, warnings, and parsed frontmatter
Registry Management
get_marketplace_stats— Get a dashboard overview: total entries, counts by type and plugin, latest update inforeload_registry— Force-refresh the in-memory cache from GitHub or local source and see a diff of what changed
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 "Install 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 an explicit tag
pip install "git+https://github.com/Palo-IT-GitHub-Demos/lab-registry-mcp@v0.2.0"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/ -vThe 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
tests/
conftest.py # session fixture: mock registry with 1 plugin / 4 artefacts
test_registry.py # unit: indexer, parsers, cache (25 tests)
test_tools_search.py # unit: list_entries, search_entries (11 tests)
test_tools_fetch.py # unit: get_entry, get_plugin (8 tests)
test_tools_compliance.py # unit: check_compliance (6 tests)
test_tools_reload.py # unit: reload_registry (4 tests)
test_tools_new.py # unit: 7 new tools — list_plugins, get_entry_by_id,
# get_changelog, get_marketplace_stats,
# suggest_entries, validate_entry,
# get_plugin_install_package (38 tests)
test_contract.py # contract: response shapes for all tools (40 tests)
test_registry_github.py # GitHub source mode (mocked HTTP, 16 tests)
test_integration.py # real marketplace: IDs, content, handlers (15 tests)
test_e2e.py # full MCP subprocess — all 15 tools (20 tests)187 tests total, 0 failures.
E2E and integration tests are skipped if REGISTRY_PATH is not set.
GitHub tests use fully mocked HTTP — no network access required.
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 to read a single artefact's documentation or to get its install files. 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 fully details the return structure (entry, metadata, content_raw, content_full, install_targets), disclosing exactly what the tool outputs. It implies a non-destructive read operation without hidden side effects.
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 efficient: two sentences for purpose/usage and a bullet list for outputs. No redundant information, every part adds value.
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?
While the output fields are well described, the description lacks parameter explanations. Given the tool has a moderate complexity (3 required params) and no schema descriptions, the description is incomplete without parameter 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?
Schema description coverage is 0%, and the description does not explain the three required parameters ('plugin', 'type', 'name'). Despite having output details, the parameter semantics are absent, requiring the agent to infer their meaning from context.
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 retrieves a specific registry entry with full content, using the verb 'get' on the resource 'registry entry'. It distinguishes from the sibling tool 'get_plugin_install_package' by noting the latter retrieves all artefacts at once.
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 ('to read a single artefact's documentation or to get its install files') and when not to, providing the alternative tool name 'get_plugin_install_package' for bulk retrieval.
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 all registry entries.
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?
The description discloses tags use OR match, but lacks mention of pagination, limits, or default behavior when no filters applied. Without annotations, more behavioral details would be beneficial.
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?
Short and front-loaded: the main action in the first sentence, followed by a clean list of filter options. Each sentence serves a purpose with no wasted words.
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 tool has an output schema (not shown), so return values are not needed. The description covers filters and tag logic, but pagination info is missing. Overall, fairly complete for a listing tool with 3 optional params.
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%, yet the description adds meaning by listing possible values for type (skill, agent, command, hook), examples for plugin (android, delivery, research-suite), and clarifying tag matching logic. This compensates well for the schema gap.
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 'List all registry entries' with specific filter options (type, plugin, tags), distinguishing it from siblings like list_plugins (only plugins) and search_entries (likely more advanced).
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 explicit guidance on when to use list_entries versus alternatives such as search_entries, get_entry, or list_plugins. The description only explains how to filter but not when to choose this tool.
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.
Splits the task into individual terms and scores entries by how many terms appear in their name, description, plugin name, and tags. Returns entries ranked by relevance score with matched_terms listed.
Use this for natural language queries (e.g. "I need to review architecture and create ADRs", "write tests for a Go service"). For exact keyword or partial name matching, use search_entries instead.
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?
Explains the scoring mechanism (splits task into terms, scores by term matches) and ranking. Lacks explicit mention of non-destructive nature or idempotency, but overall reasonable given no annotations.
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?
Concise, front-loaded, every sentence adds value. Structured with main purpose, then usage, then parameters. No unnecessary text.
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 an output schema exists, the description doesn't need to explain return values. It covers behavior, parameters, and use cases adequately for the tool's complexity.
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 fully explains each parameter: 'task' as natural language description, 'type' as optional filter, 'limit' with default. Adds meaning beyond the schema.
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 suggests registry entries relevant to a natural language task description. It distinguishes itself from the sibling 'search_entries' by specifying it's for natural language queries vs. exact keyword matching.
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 explicit guidance: use for natural language queries like 'I need to review architecture' and for exact keyword matching use 'search_entries' instead.
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. Dates show when Glama detected each change.
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
Most tools have distinct purposes, but check_compliance and check_compliance_plugin overlap in checking compliance at different granularities, which could cause minor confusion. Overall, tools are well-differentiated.
All tool names follow a consistent verb_noun pattern with underscores (e.g., get_entry, list_plugins, suggest_entries). No mixing of conventions or ambiguous verbs.
With 15 tools, the server covers the registry domain comprehensively without being bloated. Each tool serves a clear purpose and earns its place.
The tool surface covers all key operations for a registry: listing, searching, getting details, compliance checking, installation, validation, and reloading. No obvious gaps for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Registry of MCP servers, agent skills and plugins: search, filter, comments, likes, publish.
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.
A registry of 5,900+ peer-authored skills any MCP agent can search and load on demand.
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.171MIT
- AlicenseNot gradedqualityBmaintenanceDiscovers 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.95MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP-capable agents to search, inspect, lint, and safely install Agent Skills from the skillmd registry mid-conversation.21MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Palo-IT-GitHub-Demos/lab-registry-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server