npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@uluops/registry-mcp

v0.2.15

Published

MCP server for the UluOps Registry API — definition management, versioning, and analytics

Downloads

1,625

Readme

UluOps · Operating Intelligence as Infrastructure


@uluops/registry-mcp

npm version License: MIT Node.js Version TypeScript Tests

MCP (Model Context Protocol) server for the UluOps Registry API. Provides 44 tools and 4 resources that let Claude Code, OpenCode, Gemini CLI, and other MCP-compatible harnesses browse, create, validate, version, and analyze AI workflow definitions (agents, commands, workflows, pipelines).

Quick start

The recommended way to install this is via @uluops/setup, which writes the MCP config for you:

npx @uluops/setup

If you'd rather wire it up by hand, add this block to your harness's MCP config (e.g. ~/.claude.json for Claude Code, ~/.config/opencode/opencode.json for OpenCode):

{
  "mcpServers": {
    "uluops-registry": {
      "command": "npx",
      "args": ["-y", "@uluops/registry-mcp"],
      "env": {
        "ULUOPS_API_KEY": "your-api-key"
      }
    }
  }
}

Get an API key at app.uluops.ai/settings/api-keys, then restart your harness.

Configuration

All configuration is passed via environment variables in the env block. No .env file is needed.

| Variable | Description | Required | Default | |----------|-------------|----------|---------| | ULUOPS_API_KEY | API authentication key | Yes | — | | ULUOPS_ORG_SLUG | Organization slug for scoped requests | No | — | | ULUOPS_REGISTRY_TIMEOUT | Request timeout (ms) | No | 30000 | | ULUOPS_REGISTRY_RETRIES | Retry attempts | No | 3 | | LOG_LEVEL | Logging level (error, warn, info, debug) | No | info | | ENABLE_FILE_LOGGING | Write logs to disk | No | false | | LOG_DIR | Log file directory | No | ./logs | | VERBOSE_LOGGING | Verbose security decision logging | No | false | | LOG_PERFORMANCE_METRICS | Log performance metrics | No | false | | WORKSPACE_DIR | Base directory for file_path containment (CWE-22 protection) | No | cwd | | OUTPUT_BASE_DIR | Base directory for output_path containment (CWE-22 protection) | No | cwd |

Design philosophy

Thin client pattern. This MCP server contains zero business logic. All data processing, validation, storage, and rendering are handled by the registry API. The server's sole responsibility is protocol translation between MCP's stdio JSON-RPC and the backend REST API.

Quick examples

Once configured, your harness can invoke these tools through MCP:

// Browse published definitions
list_definitions({ "type": "agent", "status": "published", "limit": 10 })

// Get a specific definition with its rendered YAML
get_definition({ type: "agent", name: "code-validator", include_yaml: true })

// Search across all definition types
search_definitions({ query: "validation", type: "agent" })

// Validate YAML before publishing (inline or by file path)
validate_definition({ type: "agent", yaml: "..." })
validate_definition({ type: "agent", file_path: "/path/to/agent.yaml" })

// Create and publish a definition
create_definition({ type: "agent", name: "my-agent", yaml: "..." })
publish_definition({ type: "agent", name: "my-agent", version: "1.0.0" })

// One-call create-or-update-and-publish
update_and_publish({ type: "agent", name: "my-agent", version: "1.1.0", yaml: "..." })

// Compare versions in three different formats
diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0" })                  // section summary
diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "fields" })  // structural diff + suggested bump
diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "unified" }) // git-style diff

// Analytics
get_effectiveness({ type: "agent", name: "code-validator", version: "1.1.0" })
compare_effectiveness({ type: "agent", name: "code-validator", versions: ["1.0.0", "1.1.0"] })

Available tools

Core tools (P0)

| Tool | Description | |------|-------------| | list_definitions | List definitions with filters (type, status, domain, visibility, search, tags, pagination) | | get_definition | Get a single definition by type + name, optionally with YAML / runtime / refs | | search_definitions | Search definitions by keyword | | list_models | List AI models with optional filters | | resolve_alias | Resolve an alias (e.g. sonnet) to provider + modelId | | validate_definition | Validate YAML without storing (accepts yaml or file_path) | | render_definition | Get rendered markdown for a definition. output_path writes directly to a file |

Definition management (P1)

| Tool | Description | |------|-------------| | create_definition | Create a new draft definition (accepts yaml or file_path) | | update_definition | Update a draft definition. Smart version-up: if target version is published or doesn't exist and YAML is provided, automatically creates a new draft | | publish_definition | Publish a draft definition | | deprecate_definition | Deprecate with reason and optional successor | | archive_definition | Archive a deprecated definition (terminal lifecycle state) | | delete_definition | Delete a draft (published definitions cannot be deleted) |

Composite workflows (P1)

| Tool | Description | |------|-------------| | update_and_publish | Update a draft and publish it in one call. Inherits smart version-up + create fallback from update_definition | | batch_publish | Publish up to 20 definition versions in one call. Continues on individual failures, returns both published and failed items |

Versions & dependencies (P1)

| Tool | Description | |------|-------------| | list_versions | List all versions of a definition | | diff_versions | Compare two versions. format: sections (default), fields (structural + suggested bump), unified (git-style) | | get_dependencies | Forward dependency graph | | get_dependents | Reverse dependency graph | | get_execution_stats | Execution statistics for a definition version | | list_forks | List forks of a definition |

Forks (P2)

| Tool | Description | |------|-------------| | fork_definition | Fork a definition | | is_forkable | Check if a definition version can be forked | | get_fork_lineage | Fork ancestry chain |

Translation (P2)

| Tool | Description | |------|-------------| | retranslate_definition | Retranslate with the latest translator version | | upgrade_definition | Upgrade a definition from legacy format (accepts yaml or file_path) | | get_translator_version | Get current translator version |

Models & languages (P2)

| Tool | Description | |------|-------------| | get_model | Get specific model details by provider + modelId | | list_providers | List AI providers | | list_aliases | List all model aliases | | list_languages | List supported definition languages (ADL, CDL, WDL, PDL) | | get_language | Get a definition language with its JSON Schema. format: compact (default — condensed digest sufficient to author a definition, ~50–75% smaller), full (complete JSON Schema with patterns, bounds, and examples) |

Execution & users (P2)

| Tool | Description | |------|-------------| | record_execution | Record a definition execution (idempotent) | | get_user | Get public user profile | | batch_users | Batch user lookup (max 100) |

Analytics (P3)

| Tool | Description | |------|-------------| | get_effectiveness | Effectiveness metrics for a definition: pass rate, scores, taxonomy, health score | | get_health | Health grade and issue profile for a definition | | get_ecosystem_overview | Ecosystem-wide analytics overview | | get_lineage | Lineage graph for a definition (versions + forks as a tree) | | get_evolution | Version-over-version metrics with trend detection | | get_translation_analytics | Versions grouped by translator version with aggregate metrics | | compare_effectiveness | Compare effectiveness across 2–5 definition versions side-by-side | | get_diff_impact | Structural diff combined with metric deltas between two versions |

Session

| Tool | Description | |------|-------------| | set_default_type | Set (or clear) a session-level default for the type parameter. When set, definition tools use this type unless explicitly overridden |

Available resources

MCP resources provide read-only access to registry data via the registry:// URI scheme.

| Resource | URI | Description | |----------|-----|-------------| | Definitions | registry://definitions | Published definitions (up to 100) | | Models | registry://models | AI model catalog | | Definition types | registry://definition-types | Static list: agent, command, workflow, pipeline | | Providers | registry://providers | AI provider list |

read_resource("registry://definitions")
read_resource("registry://models")
read_resource("registry://definition-types")

Rate limiting

This server uses mcp-secure-server with configuration tuned for typical harness usage patterns. Source of truth: src/index.ts (global) and src/config/tool-registry.ts (per-tool).

| Setting | Value | Notes | |---------|-------|-------| | Security level | basic | | | Max requests/min | 120 | Global rate limit | | Burst threshold | 15 | Requests within burst window | | Burst window | 5000 ms | | | Automation detection | Disabled | The calling harness is trusted automation |

Per-tool quotas are configured in src/config/tool-registry.ts. Read-heavy tools (list, get, search) allow up to 240 req/min. Write tools (create, update, publish) are 30–60 req/min.

Development

git clone [email protected]:Uluops/-uluops-registry-mcp.git
cd -uluops-registry-mcp
npm install
npm run build
npm test            # 348 tests
npm run typecheck
npm run lint

Requirements

  • Node.js: ≥ 18
  • Platform: Linux, macOS, or WSL2
  • Auth: UluOps API key (get one here)

License

MIT