@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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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,
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
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.
|
|
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.
|
|
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"
|