@uluops/registry-mcp 0.10.0 → 0.10.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.10.2] - 2026-09-29
6
+
7
+ ### Fixed
8
+
9
+ - File rendering retains inline metadata, including selected model, and warnings alongside path/byte receipts, with the full-profile default preserved.
10
+ - File output verifies physical containment against the configured root and uses an exclusive create when overwrite is omitted.
11
+
12
+ ### Changed
13
+
14
+ - Document server-host output paths, `OUTPUT_BASE_DIR`/cwd resolution, symlink refusal and explicit overwrite in the tool schema and examples.
15
+
16
+ ## [0.10.1] - 2026-09-28
17
+
18
+ ### Changed
19
+
20
+ - `render_definition` defaults to `uluops-full` for both inline and file output. Pass `render_profile="core"` explicitly to omit UluOps-specific content. The planned core-default major release is canceled; the transition advisory is removed and the input description now matches the full default.
21
+
5
22
  ## [0.10.0] - 2026-09-27
6
23
 
7
24
  ### Changed
package/README.md CHANGED
@@ -108,10 +108,30 @@ compare_effectiveness({ type: "agent", name: "code-validator", versions: ["1.0.0
108
108
  | `validate_definition` | Validate YAML without storing (accepts `yaml` or `file_path`) |
109
109
  | `render_definition` | Get rendered markdown for a definition. `output_path` writes directly to a file |
110
110
 
111
- For a portable prompt, pass `render_profile: "core"` explicitly. Until the
112
- next major release, omitting `render_profile` retains the Registry's stored
113
- profile and returns an advisory; the next major will default omission to
114
- `core`. Pass `render_profile: "uluops-full"` to keep the full-profile behavior.
111
+ `render_definition` uses the `uluops-full` render profile when `render_profile` is
112
+ omitted, including UluOps-specific content. Pass `render_profile: "core"` explicitly
113
+ to render without that content; both inline and file-write results report the effective profile.
114
+
115
+ `output_path` writes on the **MCP server host**, within `OUTPUT_BASE_DIR` (default:
116
+ server process cwd). Relative paths resolve from that cwd, even when a different
117
+ root is configured. The root must exist; missing directories below it are created.
118
+ Paths outside the root and traversal escaping it are refused. Existing symlinks in
119
+ the file or directories below the root are checked and refused before rendering. Existing files require `overwrite: true`. Remote clients
120
+ should omit `output_path` and consume `markdown` inline.
121
+
122
+ File responses retain the inline rendering metadata (`target`, `renderProfile`,
123
+ `selectedModel`, `promptHash`, `warnings`, and any SDK metadata when supplied) alongside `success`,
124
+ `output_path`, and UTF-8 `bytes`; `markdown` is written to disk. Warnings and optional
125
+ metadata have the same presence and values as inline output.
126
+
127
+ ```jsonc
128
+ // Inline output for remote clients
129
+ render_definition({ type: "agent", name: "code-validator", target: "codex" })
130
+ // Write beneath the server cwd (or use an absolute path inside OUTPUT_BASE_DIR)
131
+ render_definition({ type: "agent", name: "code-validator", target: "codex", output_path: "output/code-validator.toml" })
132
+ // Explicit replacement retains rendering diagnostics
133
+ render_definition({ type: "agent", name: "code-validator", target: "codex", output_path: "output/code-validator.toml", overwrite: true })
134
+ ```
115
135
 
116
136
  ### Definition management (P1)
117
137
  | Tool | Description |
@@ -1 +1 @@
1
- {"version":3,"file":"render-definition.d.ts","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BtC,CAAC;AAEH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CAsHN"}
1
+ {"version":3,"file":"render-definition.d.ts","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAEL,KAAK,yBAAyB,EAG/B,MAAM,mBAAmB,CAAC;AAc3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BtC,CAAC;AAEH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,cAAc,EAAE,cAAc,GAC7B,IAAI,CA4HN"}
@@ -5,7 +5,7 @@
5
5
  * Optionally write the markdown directly to a file via output_path.
6
6
  */
7
7
  import { getDefaultType } from '../utils/session-state.js';
8
- import { writeFile, mkdir, lstat, access } from 'node:fs/promises';
8
+ import { writeFile, mkdir, lstat, access, realpath } from 'node:fs/promises';
9
9
  import { dirname, resolve, relative } from 'node:path';
10
10
  import { z } from 'zod';
11
11
  import { DefinitionTypeWithDefaultSchema, createSuccessResponse, createErrorResponse, } from '../types/index.js';
@@ -26,7 +26,7 @@ export const RenderDefinitionInputSchema = z.object({
26
26
  version: z.string().min(1).default('latest'),
27
27
  render_profile: z
28
28
  .enum(['core', 'uluops-full'])
29
- .describe("Render profile. Omission retains the Registry's stored profile (currently 'uluops-full'). Pass 'core' explicitly for a clean prompt with no UluOps-specific sections. Omission will select 'core' in the next major release.")
29
+ .describe("Render profile. Defaults to 'uluops-full', including UluOps-specific sections. Pass 'core' explicitly to render without them.")
30
30
  .optional(),
31
31
  target: z
32
32
  .string()
@@ -41,7 +41,7 @@ export const RenderDefinitionInputSchema = z.object({
41
41
  output_path: z
42
42
  .string()
43
43
  .min(1)
44
- .describe('Write rendered output to this file path instead of returning it in the response. Written on the MCP server host\'s filesystem, not the caller\'s — remote callers should omit this and take the rendered output from the response.')
44
+ .describe('Write rendered output to this file path instead of returning it in the response. Written on the MCP server host\'s filesystem, not the caller\'s. Must stay within OUTPUT_BASE_DIR (defaults to the server process cwd); relative paths resolve from that cwd. Symlink paths are refused. Remote callers should omit this and take the rendered output from the response.')
45
45
  .optional(),
46
46
  overwrite: z
47
47
  .boolean()
@@ -50,7 +50,6 @@ export const RenderDefinitionInputSchema = z.object({
50
50
  });
51
51
  export function registerRenderDefinitionTool(server, registryClient) {
52
52
  const baseHandler = createToolHandler(RenderDefinitionInputSchema, async (n) => {
53
- const profileWasOmitted = n.renderProfile === undefined;
54
53
  const effectiveRenderProfile = n.renderProfile ?? 'uluops-full';
55
54
  const result = await registryClient.render.get(n.type, n.name, n.version, {
56
55
  target: n.target,
@@ -60,12 +59,9 @@ export function registerRenderDefinitionTool(server, registryClient) {
60
59
  return {
61
60
  ...result,
62
61
  renderProfile: result.renderProfile ?? effectiveRenderProfile,
63
- ...(profileWasOmitted && {
64
- advisory: "Omitted render_profile used 'uluops-full'. Pass render_profile='core' for a clean prompt; omission will select core in the next major release.",
65
- }),
66
62
  };
67
63
  }, { toolName: 'render_definition' });
68
- server.tool('render_definition', 'Get the rendered runtime output for a definition version. Use target to render for a specific harness (opencode, codex, gemini). Use output_path to write directly to a file.', RenderDefinitionInputSchema.shape, async (args) => {
64
+ server.tool('render_definition', 'Get the rendered runtime output for a definition version. Use target to render for a specific harness (opencode, codex, gemini). Use output_path to write on the MCP server host within OUTPUT_BASE_DIR (default: server cwd); omit it for inline output. File results retain rendering metadata and warnings.', RenderDefinitionInputSchema.shape, async (args) => {
69
65
  const parsed = RenderDefinitionInputSchema.safeParse(args);
70
66
  // RG4: this tool parses its own input, so resolve the session default
71
67
  // here (the shared handler guard does it for createToolHandler tools).
@@ -76,63 +72,72 @@ export function registerRenderDefinitionTool(server, registryClient) {
76
72
  if (!parsed.success || parsed.data.output_path === undefined) {
77
73
  return baseHandler(args);
78
74
  }
79
- // Validate output_path stays within OUTPUT_BASE_DIR
80
- const outputBaseDir = getOutputBaseDir();
81
- const absPath = resolve(parsed.data.output_path);
82
- if (!absPath.startsWith(outputBaseDir + '/') && absPath !== outputBaseDir) {
83
- return createErrorResponse(`output_path must resolve within ${outputBaseDir} — got ${absPath}`);
84
- }
85
- // Reject symlinks in output path to prevent symlink-following writes (CWE-59)
86
- const pathStat = await lstat(absPath).catch(() => null);
87
- if (pathStat?.isSymbolicLink() === true) {
88
- return createErrorResponse('output_path must not be a symbolic link');
89
- }
90
- // Refuse to silently overwrite an existing regular file unless the
91
- // caller has opted in with overwrite: true. Default-deny matches
92
- // `cp --no-clobber` semantics and prevents agent-driven hallucinated
93
- // paths from destroying user work without a clear signal.
94
- if (!parsed.data.overwrite) {
95
- const exists = await access(absPath).then(() => true).catch(() => false);
96
- if (exists) {
97
- return createErrorResponse(`output_path '${absPath}' already exists. Pass overwrite: true to replace it.`);
75
+ try {
76
+ // Validate output_path stays within OUTPUT_BASE_DIR
77
+ const outputBaseDir = getOutputBaseDir();
78
+ const absPath = resolve(parsed.data.output_path);
79
+ if (!absPath.startsWith(outputBaseDir + '/') && absPath !== outputBaseDir) {
80
+ return createErrorResponse(`output_path must resolve within ${outputBaseDir} — got ${absPath}`);
98
81
  }
99
- }
100
- // Verify no symlink in ancestor directories resolves outside the base dir
101
- const rel = relative(outputBaseDir, absPath);
102
- const segments = rel.split('/');
103
- let walkPath = outputBaseDir;
104
- for (const seg of segments.slice(0, -1)) {
105
- walkPath = resolve(walkPath, seg);
106
- const segStat = await lstat(walkPath).catch(() => null);
107
- if (segStat?.isSymbolicLink() === true) {
108
- return createErrorResponse('output_path contains a symbolic link in its directory path');
82
+ // The configured root may itself use a host alias (e.g., /tmp on macOS).
83
+ // Compare physical paths against that root after creating the parent.
84
+ const realBaseDir = await realpath(outputBaseDir);
85
+ // Reject symlinks in output path to prevent symlink-following writes (CWE-59)
86
+ const pathStat = await lstat(absPath).catch(() => null);
87
+ if (pathStat?.isSymbolicLink() === true) {
88
+ return createErrorResponse('output_path must not be a symbolic link');
89
+ }
90
+ // Refuse to silently overwrite an existing regular file unless the
91
+ // caller has opted in with overwrite: true. Default-deny matches
92
+ // `cp --no-clobber` semantics and prevents agent-driven hallucinated
93
+ // paths from destroying user work without a clear signal.
94
+ if (!parsed.data.overwrite) {
95
+ const exists = await access(absPath).then(() => true).catch(() => false);
96
+ if (exists) {
97
+ return createErrorResponse(`output_path '${absPath}' already exists. Pass overwrite: true to replace it.`);
98
+ }
99
+ }
100
+ // Verify no symlink in ancestor directories resolves outside the base dir
101
+ const rel = relative(outputBaseDir, absPath);
102
+ const segments = rel.split('/');
103
+ let walkPath = outputBaseDir;
104
+ for (const seg of segments.slice(0, -1)) {
105
+ walkPath = resolve(walkPath, seg);
106
+ const segStat = await lstat(walkPath).catch(() => null);
107
+ if (segStat?.isSymbolicLink() === true) {
108
+ return createErrorResponse('output_path contains a symbolic link in its directory path');
109
+ }
110
+ }
111
+ // Narrow for the compiler: undefined resolvedType was either rejected
112
+ // above (no session default) or delegated to baseHandler (parse failure).
113
+ if (resolvedType === undefined) {
114
+ return await baseHandler(args);
109
115
  }
110
- }
111
- // Narrow for the compiler: undefined resolvedType was either rejected
112
- // above (no session default) or delegated to baseHandler (parse failure).
113
- if (resolvedType === undefined) {
114
- return baseHandler(args);
115
- }
116
- try {
117
116
  const result = await registryClient.render.get(resolvedType, parsed.data.name, parsed.data.version, { target: parsed.data.target, model: parsed.data.model, renderProfile: parsed.data.render_profile ?? 'uluops-full' });
118
117
  // SDK RenderResult guarantees markdown: string
119
- const { markdown } = result;
118
+ const { markdown, ...metadata } = result;
120
119
  if (typeof markdown !== 'string') {
121
120
  return createErrorResponse('Render result missing markdown field — cannot write to file.');
122
121
  }
123
122
  await mkdir(dirname(absPath), { recursive: true });
124
- await writeFile(absPath, markdown, 'utf-8');
123
+ const realParent = await realpath(dirname(absPath));
124
+ const realOutput = resolve(realParent, relative(dirname(absPath), absPath));
125
+ if (!realOutput.startsWith(realBaseDir + '/') && realOutput !== realBaseDir) {
126
+ return createErrorResponse('output_path resolves outside the allowed root via symlink');
127
+ }
128
+ await writeFile(absPath, markdown, { encoding: 'utf-8', flag: parsed.data.overwrite ? 'w' : 'wx' });
125
129
  return createSuccessResponse({
130
+ ...metadata,
126
131
  success: true,
127
132
  output_path: absPath,
128
133
  bytes: Buffer.byteLength(markdown, 'utf-8'),
129
134
  renderProfile: result.renderProfile ?? parsed.data.render_profile ?? 'uluops-full',
130
- ...(parsed.data.render_profile === undefined && {
131
- advisory: "Omitted render_profile used 'uluops-full'. Pass render_profile='core' for a clean prompt; omission will select core in the next major release.",
132
- }),
133
135
  });
134
136
  }
135
137
  catch (error) {
138
+ if (error instanceof Error && 'code' in error && error.code === 'EEXIST') {
139
+ return createErrorResponse('output_path already exists. Pass overwrite: true to replace it.');
140
+ }
136
141
  if (error instanceof z.ZodError) {
137
142
  return mapZodErrorToMcp(error);
138
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render-definition.js","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-definition.js","sourceRoot":"","sources":["../../src/tools/render-definition.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uluops/registry-mcp",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "MCP server for the UluOps Registry API — definition management, versioning, and analytics",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -62,7 +62,7 @@
62
62
  },
63
63
  "dependencies": {
64
64
  "@modelcontextprotocol/sdk": "^1.30.0",
65
- "@uluops/registry-sdk": "^0.56.0",
65
+ "@uluops/registry-sdk": "^0.56.1",
66
66
  "@uluops/sdk-core": "0.18.0",
67
67
  "mcp-secure-server": "0.0.25-security",
68
68
  "zod": "3.25.76"