@uluops/registry-mcp 0.1.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +98 -4
  2. package/README.md +94 -93
  3. package/dist/client/sdk-error-mapper.d.ts +29 -0
  4. package/dist/client/sdk-error-mapper.d.ts.map +1 -1
  5. package/dist/client/sdk-error-mapper.js +53 -0
  6. package/dist/client/sdk-error-mapper.js.map +1 -1
  7. package/dist/config/index.d.ts +7 -1
  8. package/dist/config/index.d.ts.map +1 -1
  9. package/dist/config/index.js +91 -14
  10. package/dist/config/index.js.map +1 -1
  11. package/dist/config/tool-registry.d.ts.map +1 -1
  12. package/dist/config/tool-registry.js +0 -8
  13. package/dist/config/tool-registry.js.map +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +15 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/tools/batch-publish.js +8 -8
  18. package/dist/tools/batch-publish.js.map +1 -1
  19. package/dist/tools/index.d.ts +1 -1
  20. package/dist/tools/index.d.ts.map +1 -1
  21. package/dist/tools/index.js +1 -3
  22. package/dist/tools/index.js.map +1 -1
  23. package/dist/tools/render-definition.d.ts +3 -0
  24. package/dist/tools/render-definition.d.ts.map +1 -1
  25. package/dist/tools/render-definition.js +15 -1
  26. package/dist/tools/render-definition.js.map +1 -1
  27. package/dist/tools/update-and-publish.d.ts.map +1 -1
  28. package/dist/tools/update-and-publish.js +15 -9
  29. package/dist/tools/update-and-publish.js.map +1 -1
  30. package/dist/tools/update-definition.d.ts.map +1 -1
  31. package/dist/tools/update-definition.js +2 -7
  32. package/dist/tools/update-definition.js.map +1 -1
  33. package/dist/types/config.d.ts +6 -2
  34. package/dist/types/config.d.ts.map +1 -1
  35. package/dist/utils/error-guards.d.ts +21 -0
  36. package/dist/utils/error-guards.d.ts.map +1 -0
  37. package/dist/utils/error-guards.js +26 -0
  38. package/dist/utils/error-guards.js.map +1 -0
  39. package/dist/utils/tool-handler.d.ts.map +1 -1
  40. package/dist/utils/tool-handler.js +20 -8
  41. package/dist/utils/tool-handler.js.map +1 -1
  42. package/package.json +19 -19
  43. package/dist/tools/sync-models.d.ts +0 -12
  44. package/dist/tools/sync-models.d.ts.map +0 -1
  45. package/dist/tools/sync-models.js +0 -32
  46. package/dist/tools/sync-models.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,11 +7,103 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.2] - 2026-06-05
11
+
12
+ Hardening pass against the ship-pipeline findings. No new tools. No
13
+ breaking changes to existing tool contracts (the new `render_definition`
14
+ `overwrite` parameter defaults to `false` — agents that previously
15
+ silently overwrote files now receive a clear error response and need to
16
+ opt in).
17
+
18
+ ### Fixed
19
+
20
+ - **`patchYamlVersion` now handles prerelease and build-metadata semver.**
21
+ The regex `\d+\.\d+\.\d+` was extended to `\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?`. Previously, source YAML with `version: 1.0.0-rc.1` would leave the `-rc.1` suffix stranded after the replacement, producing malformed YAML that the API would reject. Closes the AF-006 audit trigger that was acknowledged at v0.2.0 ship time.
22
+ - **`update_and_publish` create-fallback now guards `created.version`.** A malformed SDK response with a missing `version` field would have been silently passed through to `publish()`, producing a `/versions/undefined` URL and a 404 for a draft that was just successfully created. The handler now throws a descriptive error if `created.version` is missing or empty.
23
+ - **`render_definition` no longer silently overwrites existing files.** New `overwrite: boolean` parameter (default `false`). When false (the default) and `output_path` resolves to an existing file, the tool returns a clear MCP error rather than destroying the prior content. Agents that need replacement semantics must explicitly pass `overwrite: true`.
24
+ - **`batch_publish` per-item errors now carry rich SDK context.** Previously each failed-item entry only carried `error` (message) and `status`. The per-item catch now routes through a new `extractErrorContext(error)` helper that surfaces 402 `upgrade_url` + `required_tier` + `current_tier`, 429 `retry_after`, and 409 `nextAvailable` exactly as single-call tools do via `mapSdkErrorToMcp`.
25
+ - **MCP server now auto-runs on the proper ESM entry-point check** instead of `NODE_ENV !== 'test'`. A stray `NODE_ENV=test` in the user's shell, CI, or `direnv` no longer silently disables `main()` — the harness would have started and hung waiting for stdio JSON-RPC that never arrived. Tests already import `main` directly and call it; no test changes needed.
26
+
10
27
  ### Changed
11
28
 
12
- - Bumps `@uluops/sdk-core` from `^0.9.0` to `0.11.0` (exact pin) and `@uluops/registry-sdk`
13
- to `0.30.0` (exact pin). Aligns with the sdk-core schema-removal cascade. The MCP server's
14
- own Zod-based tool input parsing is unaffected it never used sdk-core's `options.schema`.
29
+ - **`isNumericSchema` swapped Zod `_def.innerType` access for Zod's public `unwrap()` / `removeDefault()` API.** Avoids coupling to Zod private internals that can rename across minor versions and would silently disable numeric coercion at the MCP boundary if Zod's `_def` shape ever changes.
30
+ - **`isPublishedStatusError` extracted to a shared `src/utils/error-guards.ts` module.** Previously this 3-line guard was duplicated verbatim across `update-definition.ts` and `update-and-publish.ts`. A future change to the underlying API error message now updates one location instead of two.
31
+ - **Added `prepublishOnly: npm run build` script.** Future `npm publish` runs no longer rely on the maintainer remembering to build first.
32
+
33
+ ### Added
34
+
35
+ - **`extractErrorContext(error)` helper in `client/sdk-error-mapper.ts`** — returns the same structured fields (`status`, `required_tier`, `upgrade_url`, `retry_after`, `nextAvailable`) that `mapSdkErrorToMcp` produces, but without wrapping them in an MCP envelope. Used by `batch_publish`.
36
+
37
+ ### Tests
38
+
39
+ 348 tests pass (was 345, +3 regression coverage):
40
+ - New: `patches prerelease semver versions in yaml during create fallback`
41
+ - New: `refuses to overwrite an existing file when overwrite is not opted into`
42
+ - New: `writes to existing file when overwrite: true is passed`
43
+
44
+ ## [0.2.1] - 2026-06-05
45
+
46
+ ### Changed
47
+
48
+ - **Backend URL resolution deferred to the SDK.** Previously the MCP server
49
+ shadowed `@uluops/registry-sdk`'s `DEFAULT_BASE_URL` with its own copy
50
+ and effectively required `ULUOPS_REGISTRY_URL` (treating empty/undefined
51
+ as "use the shadow constant"). The SDK already resolves the correct
52
+ production URL (`https://api.uluops.ai/api/v1/registry`) by default and
53
+ switches to localhost when `NODE_ENV=development`; the MCP now passes
54
+ `baseUrl` through as `undefined` when the env var is unset/empty and lets
55
+ the SDK own URL resolution. Public consumers no longer set anything but
56
+ `ULUOPS_API_KEY`. README's configuration table reduced to consumer-
57
+ relevant variables; `ULUOPS_REGISTRY_URL` removed from the public
58
+ surface (still honored by the code when explicitly set).
59
+ - **SSRF defense and host allowlist now gate on `baseUrl !== undefined`.**
60
+ When the operator does not set `ULUOPS_REGISTRY_URL` the SDK uses a
61
+ trusted compile-time constant, so the URL-parse/allowlist/private-host
62
+ checks are skipped — they only run when an operator explicitly provides
63
+ a URL that needs validation. Identical behavior for any URL that was
64
+ previously accepted; previously-rejected URLs are still rejected.
65
+ - **Pairs with `@uluops/setup@0.6.4`** which stopped stamping
66
+ `ULUOPS_REGISTRY_URL` into `.mcp.json` files during onboarding, and with
67
+ `@uluops/ops-mcp@0.2.1` which applied the same fix to the ops tracker.
68
+
69
+ ### Internal
70
+
71
+ - `DEFAULT_BASE_URL` constant removed from `src/config/index.ts`.
72
+ - `ApiClientConfig.baseUrl` type widened to `string | undefined`.
73
+ - Startup log apiUrl line shows `(SDK default)` when baseUrl is unset.
74
+
75
+ ## [0.2.0] - 2026-06-05
76
+
77
+ First release of the monorepo `@uluops/registry-mcp` package at parity
78
+ with the standalone `uluops-registry-mcp` 0.1.1 codebase, prepared for
79
+ first public npm publish under the scoped name.
80
+
81
+ ### Added
82
+
83
+ - **`list_languages` and `get_language` tools** — language registry
84
+ read tools surfaced through the MCP server.
85
+
86
+ ### Changed
87
+
88
+ - **`@uluops/registry-sdk` bumped `^0.27.2` → `0.30.2`** (three minor
89
+ versions). Pulls in 0.29.0 publish-warning surfacing, 0.30.x sdk-core
90
+ security hardening cascade, and the schema-removal cleanup.
91
+ - **`@uluops/sdk-core` confirmed at `0.11.1`** with `redirect: 'error'`
92
+ on all fetch sites, control-character stripping, and widened sensitive-
93
+ key coverage (`x-api-key`, `set-cookie`, `proxy-authorization`).
94
+ - **All runtime and dev dependencies pinned to exact versions** per the
95
+ 2026-06-01 UluOps supply-chain hardening policy.
96
+ - **`vitest` and `@vitest/coverage-v8` bumped to `4.1.8`** — eliminates
97
+ the moderate-severity esbuild advisory chained through vite. `npm audit`
98
+ now reports 0 vulnerabilities.
99
+
100
+ ### Not included
101
+
102
+ - **`sync_models` admin tool deliberately excluded.** Calls a private
103
+ registry admin endpoint not exposed through the public SDK; reserved
104
+ for internal use and intentionally never shipped in this public package.
105
+
106
+ ### Historical lineage (legacy `uluops-registry-mcp` versions below)
15
107
 
16
108
  ## [1.14.0] - 2026-05-20
17
109
 
@@ -134,7 +226,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
134
226
  - Error sanitization stripping sensitive data (API keys, tokens, stack traces) from MCP responses
135
227
  - Test suite with 194 tests covering all tools, resources, and registry config
136
228
 
137
- [Unreleased]: https://github.com/Uluops/-uluops-registry-mcp/compare/v1.14.0...HEAD
229
+ [Unreleased]: https://github.com/Uluops/-uluops-registry-mcp/compare/v0.2.1...HEAD
230
+ [0.2.1]: https://github.com/Uluops/-uluops-registry-mcp/compare/v0.2.0...v0.2.1
231
+ [0.2.0]: https://github.com/Uluops/-uluops-registry-mcp/releases/tag/v0.2.0
138
232
  [1.14.0]: https://github.com/Uluops/-uluops-registry-mcp/compare/v1.13.0...v1.14.0
139
233
  [1.13.0]: https://github.com/Uluops/-uluops-registry-mcp/compare/v1.12.0...v1.13.0
140
234
  [1.12.0]: https://github.com/Uluops/-uluops-registry-mcp/compare/v1.11.0...v1.12.0
package/README.md CHANGED
@@ -1,33 +1,28 @@
1
- # UluOps Registry MCP Client v1.1.0
1
+ **[UluOps](https://uluops.ai)** · Operating Intelligence as Infrastructure
2
2
 
3
- MCP (Model Context Protocol) client for the UluOps Registry API. Provides **31 tools** and **4 resources** that enable Claude Code to browse, create, validate, and manage AI workflow definitions (agents, commands, workflows, pipelines).
3
+ ---
4
4
 
5
- ## Quick Setup (30 seconds)
5
+ # @uluops/registry-mcp
6
6
 
7
- ```bash
8
- git clone git@github.com:Uluops/-uluops-registry-mcp.git
9
- cd -uluops-registry-mcp
10
- ./setup.sh YOUR_API_KEY
11
- ```
7
+ MCP (Model Context Protocol) server for the [UluOps](https://uluops.ai) 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).
12
8
 
13
- The setup script installs dependencies, builds the project, and prints the `.mcp.json` config snippet to paste into your project or `~/.claude/.mcp.json`.
9
+ ## Quick start
14
10
 
15
- Or do it manually:
11
+ The recommended way to install this is via [@uluops/setup](https://www.npmjs.com/package/@uluops/setup), which writes the MCP config for you:
16
12
 
17
13
  ```bash
18
- npm install && npm run build
14
+ npx @uluops/setup
19
15
  ```
20
16
 
21
- Then add to your `.mcp.json`:
17
+ 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):
22
18
 
23
19
  ```json
24
20
  {
25
21
  "mcpServers": {
26
22
  "uluops-registry": {
27
- "command": "node",
28
- "args": ["/absolute/path/to/registry-uluops-mcp/dist/index.js"],
23
+ "command": "npx",
24
+ "args": ["-y", "@uluops/registry-mcp"],
29
25
  "env": {
30
- "ULUOPS_REGISTRY_URL": "http://localhost:3001/api/v1",
31
26
  "ULUOPS_API_KEY": "your-api-key"
32
27
  }
33
28
  }
@@ -35,39 +30,35 @@ Then add to your `.mcp.json`:
35
30
  }
36
31
  ```
37
32
 
38
- Restart Claude Code to pick up the new server.
39
-
40
- ## Design Philosophy
41
-
42
- **Thin Client Pattern**: This MCP client contains **zero business logic**. All data processing, validation, storage, and rendering are handled by the registry API. The client's sole responsibility is protocol translation between MCP's stdio-based JSON-RPC and the backend's REST API.
33
+ Get an API key at [app.uluops.ai/settings/api-keys](https://app.uluops.ai/settings/api-keys), then restart your harness.
43
34
 
44
35
  ## Configuration
45
36
 
46
- All configuration is passed via environment variables in the `env` block of `.mcp.json`. No `.env` file needed.
37
+ All configuration is passed via environment variables in the `env` block. No `.env` file is needed.
47
38
 
48
39
  | Variable | Description | Required | Default |
49
40
  |----------|-------------|----------|---------|
50
- | `ULUOPS_REGISTRY_URL` | Registry API URL | Yes | - |
51
- | `ULUOPS_API_KEY` | API authentication key | Yes | - |
52
- | `ULUOPS_REGISTRY_TIMEOUT` | Request timeout (ms) | No | 30000 |
53
- | `ULUOPS_REGISTRY_RETRIES` | Retry attempts | No | 3 |
54
- | `LOG_LEVEL` | Logging level | No | info |
55
- | `ENABLE_FILE_LOGGING` | Write logs to disk | No | false |
56
- | `LOG_DIR` | Log file directory | No | ./logs |
57
- | `VERBOSE_LOGGING` | Verbose security decision logging | No | false |
58
- | `LOG_PERFORMANCE_METRICS` | Log performance metrics | No | false |
41
+ | `ULUOPS_API_KEY` | API authentication key | Yes | |
42
+ | `ULUOPS_ORG_SLUG` | Organization slug for scoped requests | No | |
43
+ | `ULUOPS_REGISTRY_TIMEOUT` | Request timeout (ms) | No | `30000` |
44
+ | `ULUOPS_REGISTRY_RETRIES` | Retry attempts | No | `3` |
45
+ | `LOG_LEVEL` | Logging level (`error`, `warn`, `info`, `debug`) | No | `info` |
46
+ | `ENABLE_FILE_LOGGING` | Write logs to disk | No | `false` |
47
+ | `LOG_DIR` | Log file directory | No | `./logs` |
48
+ | `VERBOSE_LOGGING` | Verbose security decision logging | No | `false` |
49
+ | `LOG_PERFORMANCE_METRICS` | Log performance metrics | No | `false` |
59
50
  | `WORKSPACE_DIR` | Base directory for `file_path` containment (CWE-22 protection) | No | cwd |
60
51
  | `OUTPUT_BASE_DIR` | Base directory for `output_path` containment (CWE-22 protection) | No | cwd |
61
52
 
62
- A `.env.example` is included as a template showing available variables. This file is **not** auto-loaded — copy it to `.env` or set variables directly in `.mcp.json`.
53
+ ## Design philosophy
63
54
 
64
- ## Quick Start Examples
55
+ **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.
65
56
 
66
- Once configured, Claude Code can use the registry tools:
57
+ ## Quick examples
67
58
 
68
- ```jsonc
69
- // These are MCP tool calls — Claude Code invokes them automatically.
59
+ Once configured, your harness can invoke these tools through MCP:
70
60
 
61
+ ```jsonc
71
62
  // Browse published definitions
72
63
  list_definitions({ "type": "agent", "status": "published", "limit": 10 })
73
64
 
@@ -77,93 +68,114 @@ get_definition({ type: "agent", name: "code-validator", include_yaml: true })
77
68
  // Search across all definition types
78
69
  search_definitions({ query: "validation", type: "agent" })
79
70
 
80
- // Resolve a model alias
81
- resolve_alias({ alias: "sonnet" })
82
-
83
- // Validate YAML before publishing
71
+ // Validate YAML before publishing (inline or by file path)
84
72
  validate_definition({ type: "agent", yaml: "..." })
85
-
86
- // Or validate from a file path instead of inline YAML
87
73
  validate_definition({ type: "agent", file_path: "/path/to/agent.yaml" })
88
74
 
89
75
  // Create and publish a definition
90
- create_definition({ type: "agent", name: "my-agent", yaml: "name: my-agent\nversion: 1.0.0\n..." })
76
+ create_definition({ type: "agent", name: "my-agent", yaml: "..." })
91
77
  publish_definition({ type: "agent", name: "my-agent", version: "1.0.0" })
92
78
 
93
- // Compare versions — section summary (default)
94
- diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0" })
79
+ // One-call create-or-update-and-publish
80
+ update_and_publish({ type: "agent", name: "my-agent", version: "1.1.0", yaml: "..." })
95
81
 
96
- // Compare versions structural diff with classification
97
- diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "fields" })
98
- // Returns: fields[], classified[], suggestedBump, summary, sections
82
+ // Compare versions in three different formats
83
+ diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0" }) // section summary
84
+ diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "fields" }) // structural diff + suggested bump
85
+ diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "unified" }) // git-style diff
99
86
 
100
- // Compare versions — unified line diff
101
- diff_versions({ type: "agent", name: "code-validator", from: "1.0.0", to: "1.1.0", format: "unified" })
102
- // Returns: unified (git-style diff string)
87
+ // Analytics
88
+ get_effectiveness({ type: "agent", name: "code-validator", version: "1.1.0" })
89
+ compare_effectiveness({ type: "agent", name: "code-validator", versions: ["1.0.0", "1.1.0"] })
103
90
  ```
104
91
 
105
- ## Available Tools
92
+ ## Available tools
106
93
 
107
- ### Core Tools (P0)
94
+ ### Core tools (P0)
108
95
  | Tool | Description |
109
96
  |------|-------------|
110
97
  | `list_definitions` | List definitions with filters (type, status, domain, visibility, search, tags, pagination) |
111
- | `get_definition` | Get a single definition by type+name, optionally with YAML/runtime/refs |
98
+ | `get_definition` | Get a single definition by type + name, optionally with YAML / runtime / refs |
112
99
  | `search_definitions` | Search definitions by keyword |
113
100
  | `list_models` | List AI models with optional filters |
114
- | `resolve_alias` | Resolve alias (e.g. "sonnet") to provider+modelId |
101
+ | `resolve_alias` | Resolve an alias (e.g. `sonnet`) to provider + modelId |
115
102
  | `validate_definition` | Validate YAML without storing (accepts `yaml` or `file_path`) |
116
- | `render_definition` | Get rendered markdown for a definition. Use `output_path` to write directly to a file |
103
+ | `render_definition` | Get rendered markdown for a definition. `output_path` writes directly to a file |
117
104
 
118
- ### Definition Management Tools (P1)
105
+ ### Definition management (P1)
119
106
  | Tool | Description |
120
107
  |------|-------------|
121
108
  | `create_definition` | Create a new draft definition (accepts `yaml` or `file_path`) |
122
- | `update_definition` | Update a draft definition (`yaml`/`file_path`, visibility, description, tags). Smart version-up: if the target version is published or doesn't exist and YAML is provided, automatically creates a new draft instead of failing |
109
+ | `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 |
123
110
  | `publish_definition` | Publish a draft definition |
124
111
  | `deprecate_definition` | Deprecate with reason and optional successor |
112
+ | `archive_definition` | Archive a deprecated definition (terminal lifecycle state) |
125
113
  | `delete_definition` | Delete a draft (published definitions cannot be deleted) |
126
114
 
127
- ### Version & Dependency Tools (P1)
115
+ ### Composite workflows (P1)
116
+ | Tool | Description |
117
+ |------|-------------|
118
+ | `update_and_publish` | Update a draft and publish it in one call. Inherits smart version-up + create fallback from `update_definition` |
119
+ | `batch_publish` | Publish up to 20 definition versions in one call. Continues on individual failures, returns both published and failed items |
120
+
121
+ ### Versions & dependencies (P1)
128
122
  | Tool | Description |
129
123
  |------|-------------|
130
124
  | `list_versions` | List all versions of a definition |
131
- | `diff_versions` | Compare two versions. Supports `format`: `sections` (default summary), `fields` (structural diff with classification + suggested bump), `unified` (git-style line diff) |
125
+ | `diff_versions` | Compare two versions. `format`: `sections` (default), `fields` (structural + suggested bump), `unified` (git-style) |
132
126
  | `get_dependencies` | Forward dependency graph |
133
127
  | `get_dependents` | Reverse dependency graph |
134
128
  | `get_execution_stats` | Execution statistics for a definition version |
135
129
  | `list_forks` | List forks of a definition |
136
130
 
137
- ### Fork Tools (P2)
131
+ ### Forks (P2)
138
132
  | Tool | Description |
139
133
  |------|-------------|
140
134
  | `fork_definition` | Fork a definition |
141
135
  | `is_forkable` | Check if a definition version can be forked |
142
136
  | `get_fork_lineage` | Fork ancestry chain |
143
137
 
144
- ### Translation Tools (P2)
138
+ ### Translation (P2)
145
139
  | Tool | Description |
146
140
  |------|-------------|
147
141
  | `retranslate_definition` | Retranslate with the latest translator version |
148
142
  | `upgrade_definition` | Upgrade a definition from legacy format (accepts `yaml` or `file_path`) |
149
143
  | `get_translator_version` | Get current translator version |
150
144
 
151
- ### Model Tools (P2)
145
+ ### Models & languages (P2)
152
146
  | Tool | Description |
153
147
  |------|-------------|
154
- | `get_model` | Get specific model details by provider+modelId |
148
+ | `get_model` | Get specific model details by provider + modelId |
155
149
  | `list_providers` | List AI providers |
156
150
  | `list_aliases` | List all model aliases |
157
- | `sync_models` | Sync model catalog (admin) |
151
+ | `list_languages` | List supported definition languages (ADL, CDL, WDL, PDL) |
152
+ | `get_language` | Get a definition language with its current JSON Schema |
158
153
 
159
- ### Execution & User Tools (P2)
154
+ ### Execution & users (P2)
160
155
  | Tool | Description |
161
156
  |------|-------------|
162
157
  | `record_execution` | Record a definition execution (idempotent) |
163
158
  | `get_user` | Get public user profile |
164
159
  | `batch_users` | Batch user lookup (max 100) |
165
160
 
166
- ## Available Resources
161
+ ### Analytics (P3)
162
+ | Tool | Description |
163
+ |------|-------------|
164
+ | `get_effectiveness` | Effectiveness metrics for a definition: pass rate, scores, taxonomy, health score |
165
+ | `get_health` | Health grade and issue profile for a definition |
166
+ | `get_ecosystem_overview` | Ecosystem-wide analytics overview |
167
+ | `get_lineage` | Lineage graph for a definition (versions + forks as a tree) |
168
+ | `get_evolution` | Version-over-version metrics with trend detection |
169
+ | `get_translation_analytics` | Versions grouped by translator version with aggregate metrics |
170
+ | `compare_effectiveness` | Compare effectiveness across 2–5 definition versions side-by-side |
171
+ | `get_diff_impact` | Structural diff combined with metric deltas between two versions |
172
+
173
+ ### Session
174
+ | Tool | Description |
175
+ |------|-------------|
176
+ | `set_default_type` | Set (or clear) a session-level default for the `type` parameter. When set, definition tools use this type unless explicitly overridden |
177
+
178
+ ## Available resources
167
179
 
168
180
  MCP resources provide read-only access to registry data via the `registry://` URI scheme.
169
181
 
@@ -171,58 +183,47 @@ MCP resources provide read-only access to registry data via the `registry://` UR
171
183
  |----------|-----|-------------|
172
184
  | Definitions | `registry://definitions` | Published definitions (up to 100) |
173
185
  | Models | `registry://models` | AI model catalog |
174
- | Definition Types | `registry://definition-types` | Static list: agent, command, workflow, pipeline |
186
+ | Definition types | `registry://definition-types` | Static list: agent, command, workflow, pipeline |
175
187
  | Providers | `registry://providers` | AI provider list |
176
188
 
177
- ### Resource Usage
178
-
179
189
  ```typescript
180
- // List published definitions
181
190
  read_resource("registry://definitions")
182
-
183
- // Browse available AI models
184
191
  read_resource("registry://models")
185
-
186
- // Get supported definition types with descriptions
187
192
  read_resource("registry://definition-types")
188
193
  ```
189
194
 
190
- ## Rate Limiting Configuration
195
+ ## Rate limiting
191
196
 
192
- This client uses [mcp-secure-server](https://github.com/anthropics/mcp-secure-server) with configuration optimized for Claude Code's usage patterns. Source of truth: `src/index.ts` (global) and `src/config/tool-registry.ts` (per-tool).
197
+ This server uses [mcp-secure-server](https://github.com/aself101/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).
193
198
 
194
199
  | Setting | Value | Notes |
195
200
  |---------|-------|-------|
196
201
  | Security level | `basic` | |
197
202
  | Max requests/min | 120 | Global rate limit |
198
203
  | Burst threshold | 15 | Requests within burst window |
199
- | Burst window | 5000ms | |
200
- | Automation detection | Disabled | Claude Code is trusted automation |
204
+ | Burst window | 5000 ms | |
205
+ | Automation detection | Disabled | The calling harness is trusted automation |
201
206
 
202
- 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. Admin operations like `sync_models` are tightly limited (10 req/min).
207
+ 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 3060 req/min.
203
208
 
204
209
  ## Development
205
210
 
206
211
  ```bash
207
- # Install dependencies
212
+ git clone git@github.com:Uluops/-uluops-registry-mcp.git
213
+ cd -uluops-registry-mcp
208
214
  npm install
209
-
210
- # Development mode with watch
211
- npm run dev
212
-
213
- # Run tests
214
- npm test
215
-
216
- # Type checking
215
+ npm run build
216
+ npm test # 329 tests
217
217
  npm run typecheck
218
-
219
- # Linting
220
218
  npm run lint
221
-
222
- # Build for production
223
- npm run build
224
219
  ```
225
220
 
221
+ ## Requirements
222
+
223
+ - **Node.js:** ≥ 18
224
+ - **Platform:** Linux, macOS, or WSL2
225
+ - **Auth:** UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
226
+
226
227
  ## License
227
228
 
228
229
  MIT
@@ -12,6 +12,35 @@ import type { McpToolResponse } from '../types/index.js';
12
12
  * and truncation.
13
13
  */
14
14
  export declare const sanitizeErrorMessage: typeof sanitizeString;
15
+ export interface ExtractedErrorContext {
16
+ /** Sanitized human-readable message. */
17
+ message: string;
18
+ /** HTTP status code if available on the SDK error. */
19
+ status?: number;
20
+ /** 402-only: tier required for access. */
21
+ required_tier?: string;
22
+ /** 402-only: caller's current tier. */
23
+ current_tier?: string;
24
+ /** 402-only: definition reference. */
25
+ definition?: {
26
+ type?: string;
27
+ name?: string;
28
+ };
29
+ /** 402-only: upgrade URL (mcp-source-tagged). */
30
+ upgrade_url?: string;
31
+ /** 409-only: next available version hint. */
32
+ nextAvailable?: unknown;
33
+ /** 429-only: server-recommended retry delay in seconds. */
34
+ retry_after?: number;
35
+ }
36
+ /**
37
+ * Extract the same structured-error fields as `mapSdkErrorToMcp` produces,
38
+ * but without wrapping them in an `McpToolResponse`. Useful inside batch
39
+ * loops where each per-item failure should embed the rich error context
40
+ * (402 upgrade URL, 429 retry-after, 409 nextAvailable) into the parent
41
+ * response rather than producing one MCP error envelope per failure.
42
+ */
43
+ export declare function extractErrorContext(error: unknown): ExtractedErrorContext;
15
44
  /**
16
45
  * Map an SDK error to an MCP tool response.
17
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-error-mapper.d.ts","sourceRoot":"","sources":["../../src/client/sdk-error-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uBAAiB,CAAC;AAkCnD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAqGhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAahE"}
1
+ {"version":3,"file":"sdk-error-mapper.d.ts","sourceRoot":"","sources":["../../src/client/sdk-error-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,uBAAiB,CAAC;AAkCnD,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAiDzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAqGhE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAahE"}
@@ -39,6 +39,59 @@ function buildErrorResponse(message, metadata) {
39
39
  isError: true,
40
40
  };
41
41
  }
42
+ /**
43
+ * Extract the same structured-error fields as `mapSdkErrorToMcp` produces,
44
+ * but without wrapping them in an `McpToolResponse`. Useful inside batch
45
+ * loops where each per-item failure should embed the rich error context
46
+ * (402 upgrade URL, 429 retry-after, 409 nextAvailable) into the parent
47
+ * response rather than producing one MCP error envelope per failure.
48
+ */
49
+ export function extractErrorContext(error) {
50
+ const status = getStatusCode(error);
51
+ if (status === 402) {
52
+ const details = error.details ?? {};
53
+ const requiredTier = typeof details['requiredTier'] === 'string' ? details['requiredTier'] : undefined;
54
+ const currentTier = typeof details['currentTier'] === 'string' ? details['currentTier'] : undefined;
55
+ const def = (details['definition'] && typeof details['definition'] === 'object')
56
+ ? details['definition']
57
+ : undefined;
58
+ const upgradeUrl = typeof details['upgradeUrl'] === 'string' ? details['upgradeUrl'] : undefined;
59
+ const sep = upgradeUrl?.includes('?') === true ? '&' : '?';
60
+ const trackedUrl = upgradeUrl !== undefined ? `${upgradeUrl}${sep}source=mcp` : undefined;
61
+ return {
62
+ message: sanitizeErrorMessage(getErrorMessage(error, 'Subscription required')),
63
+ status,
64
+ ...(requiredTier !== undefined ? { required_tier: requiredTier } : {}),
65
+ ...(currentTier !== undefined ? { current_tier: currentTier } : {}),
66
+ ...(def !== undefined ? { definition: def } : {}),
67
+ ...(trackedUrl !== undefined ? { upgrade_url: trackedUrl } : {}),
68
+ };
69
+ }
70
+ if (isRateLimitError(error)) {
71
+ const details = error.details ?? {};
72
+ const retryAfter = typeof details['retryAfter'] === 'number' ? details['retryAfter'] : undefined;
73
+ return {
74
+ message: sanitizeErrorMessage(getErrorMessage(error, 'Rate limit exceeded')),
75
+ status,
76
+ ...(retryAfter !== undefined ? { retry_after: retryAfter } : {}),
77
+ };
78
+ }
79
+ if (isConflictError(error)) {
80
+ const details = 'details' in error
81
+ ? error.details
82
+ : undefined;
83
+ const nextAvailable = details?.['nextAvailable'];
84
+ return {
85
+ message: sanitizeErrorMessage(getErrorMessage(error, 'Resource conflict')),
86
+ ...(status !== undefined ? { status } : {}),
87
+ ...(nextAvailable !== undefined ? { nextAvailable } : {}),
88
+ };
89
+ }
90
+ return {
91
+ message: sanitizeErrorMessage(getErrorMessage(error, 'Unknown error')),
92
+ ...(status !== undefined ? { status } : {}),
93
+ };
94
+ }
42
95
  /**
43
96
  * Map an SDK error to an MCP tool response.
44
97
  *
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-error-mapper.js","sourceRoot":"","sources":["../../src/client/sdk-error-mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AAEnD,2DAA2D;AAC3D,SAAS,eAAe,CAAC,KAAc,EAAE,QAAgB;IACvD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACtE,OAAO,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8DAA8D;AAC9D,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QAChE,OAAQ,KAAgC,CAAC,UAAU,CAAC;IACtD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+DAA+D;AAC/D,SAAS,kBAAkB,CACzB,OAAe,EACf,QAAkC;IAElC,MAAM,OAAO,GAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,EAClE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAI,KAAiC,CAAC,UAAU,CAAC;QACjE,OAAO,kBAAkB,CACvB,UAAU;YACR,CAAC,CAAC,oCAAoC,MAAM,CAAC,UAAU,CAAC,WAAW;YACnE,CAAC,CAAC,0CAA0C,EAC9C,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;IAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,EAC1E,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,OAAO,kBAAkB,CACvB,6EAA6E,EAC7E,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,EAC7D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAI,KAA+C,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAkC,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAiC,CAAC;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,UAA0D,CAAC;QAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAgC,CAAC;QAC5D,MAAM,GAAG,GAAG,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,MAAM,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,YAAY,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC3F,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,YAAY,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,uBAAuB,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9E,OAAO,kBAAkB,CACvB,mCAAmC,QAAQ,IAAI,SAAS,GAAG,YAAY,EAAE;YACzE,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC7C;YACE,MAAM,EAAE,GAAG;YACX,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CACF,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,sEAAsE;QACtE,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK;YAChC,CAAC,CAAE,KAA+C,CAAC,OAAO;YAC1D,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,EACjE;YACE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CACF,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,EACrE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,kBAAkB,CACvB,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,EACrE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,kBAAkB,CAAC,8BAA8B,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,GAAG,0BAA0B,CAAC;IAEzC,IAAI,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,KAA0B,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACrC,OAAO,GAAG,sBAAsB,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC;IAC5F,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"sdk-error-mapper.js","sourceRoot":"","sources":["../../src/client/sdk-error-mapper.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,12 @@ export declare const VERSION: string;
12
12
  export declare function loadConfig(): RegistryMcpConfig;
13
13
  /**
14
14
  * Validate that required configuration is present and well-formed.
15
+ *
16
+ * Returns a list of non-fatal warnings (e.g., custom registry URL accepted
17
+ * via escape hatch) that the caller should log so the user sees what
18
+ * happened during startup.
15
19
  */
16
- export declare function validateConfig(config: RegistryMcpConfig): void;
20
+ export declare function validateConfig(config: RegistryMcpConfig): {
21
+ warnings: string[];
22
+ };
17
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAKrE,kEAAkE;AAClE,eAAO,MAAM,OAAO,QAAa,CAAC;AA0BlC;;GAEG;AACH,wBAAgB,UAAU,IAAI,iBAAiB,CA2B9C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CA4B9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAKrE,kEAAkE;AAClE,eAAO,MAAM,OAAO,QAAa,CAAC;AAyBlC;;GAEG;AACH,wBAAgB,UAAU,IAAI,iBAAiB,CA6B9C;AAwCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAqEhF"}