@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.
- package/CHANGELOG.md +98 -4
- package/README.md +94 -93
- package/dist/client/sdk-error-mapper.d.ts +29 -0
- package/dist/client/sdk-error-mapper.d.ts.map +1 -1
- package/dist/client/sdk-error-mapper.js +53 -0
- package/dist/client/sdk-error-mapper.js.map +1 -1
- package/dist/config/index.d.ts +7 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +91 -14
- package/dist/config/index.js.map +1 -1
- package/dist/config/tool-registry.d.ts.map +1 -1
- package/dist/config/tool-registry.js +0 -8
- package/dist/config/tool-registry.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/tools/batch-publish.js +8 -8
- package/dist/tools/batch-publish.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/render-definition.d.ts +3 -0
- package/dist/tools/render-definition.d.ts.map +1 -1
- package/dist/tools/render-definition.js +15 -1
- package/dist/tools/render-definition.js.map +1 -1
- package/dist/tools/update-and-publish.d.ts.map +1 -1
- package/dist/tools/update-and-publish.js +15 -9
- package/dist/tools/update-and-publish.js.map +1 -1
- package/dist/tools/update-definition.d.ts.map +1 -1
- package/dist/tools/update-definition.js +2 -7
- package/dist/tools/update-definition.js.map +1 -1
- package/dist/types/config.d.ts +6 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/error-guards.d.ts +21 -0
- package/dist/utils/error-guards.d.ts.map +1 -0
- package/dist/utils/error-guards.js +26 -0
- package/dist/utils/error-guards.js.map +1 -0
- package/dist/utils/tool-handler.d.ts.map +1 -1
- package/dist/utils/tool-handler.js +20 -8
- package/dist/utils/tool-handler.js.map +1 -1
- package/package.json +19 -19
- package/dist/tools/sync-models.d.ts +0 -12
- package/dist/tools/sync-models.d.ts.map +0 -1
- package/dist/tools/sync-models.js +0 -32
- package/dist/tools/sync-models.js.map +0 -1
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* of failing. The API server extracts the version from the YAML content.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
-
import { isNotFoundError
|
|
12
|
+
import { isNotFoundError } from '@uluops/registry-sdk/errors';
|
|
13
|
+
import { isPublishedStatusError } from '../utils/error-guards.js';
|
|
13
14
|
import { DefinitionTypeSchema, VisibilitySchema, TierSchema, SubscriptionTierSchema, ChangeTypeSchema, ProvenanceInputSchema, } from '../types/index.js';
|
|
14
15
|
import { createToolHandler } from '../utils/tool-handler.js';
|
|
15
16
|
import { resolveYamlInput } from '../utils/read-yaml-file.js';
|
|
@@ -28,12 +29,6 @@ export const UpdateDefinitionInputSchema = z.object({
|
|
|
28
29
|
change_type: ChangeTypeSchema.optional(),
|
|
29
30
|
provenance: ProvenanceInputSchema.optional().describe('Authorship provenance. Merges with existing provenance if present.'),
|
|
30
31
|
});
|
|
31
|
-
/** Check if an error is a "published status" validation error from the API. */
|
|
32
|
-
function isPublishedStatusError(error) {
|
|
33
|
-
return isValidationError(error) &&
|
|
34
|
-
error instanceof Error &&
|
|
35
|
-
error.message.includes("'published' status");
|
|
36
|
-
}
|
|
37
32
|
export function registerUpdateDefinitionTool(server, registryClient) {
|
|
38
33
|
server.tool('update_definition', 'Update a draft definition version with new YAML, visibility, description, or tags.', UpdateDefinitionInputSchema.shape, createToolHandler(UpdateDefinitionInputSchema, async (n) => {
|
|
39
34
|
const body = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-definition.js","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"update-definition.js","sourceRoot":"","sources":["../../src/tools/update-definition.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
5
5
|
export interface ApiClientConfig {
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Base URL for the registry API. Optional — when undefined, the SDK's
|
|
8
|
+
* `DEFAULT_BASE_URL` is used (prod by default; localhost when
|
|
9
|
+
* `NODE_ENV=development`).
|
|
10
|
+
*/
|
|
11
|
+
baseUrl?: string;
|
|
8
12
|
/** API key for authentication */
|
|
9
13
|
apiKey?: string;
|
|
10
14
|
/** Org slug for multi-tenancy — sets X-Org-Slug header on all requests */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0BAA0B;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,eAAe,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,cAAc,CAAC;CAC1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error-classification helpers for tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* These guards exist so individual tools don't reimplement substring-match
|
|
5
|
+
* heuristics that need to stay aligned with the registry API's error
|
|
6
|
+
* messaging. Centralizing them here means a single update site if the API
|
|
7
|
+
* error wording changes.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Detects the "cannot modify in 'published' status" validation error
|
|
11
|
+
* returned by the registry API when the caller targets an already-published
|
|
12
|
+
* version. Used by tools that implement smart-version-up-and-create
|
|
13
|
+
* fallback behavior (update_definition, update_and_publish).
|
|
14
|
+
*
|
|
15
|
+
* NOTE: this is substring-coupled to the API error message format. If the
|
|
16
|
+
* API changes that wording, this guard goes silent and the affected fallback
|
|
17
|
+
* paths stop triggering. Keep this in sync with uluops-registry-api's
|
|
18
|
+
* status-transition validator.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isPublishedStatusError(error: unknown): boolean;
|
|
21
|
+
//# sourceMappingURL=error-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-guards.d.ts","sourceRoot":"","sources":["../../src/utils/error-guards.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM9D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared error-classification helpers for tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* These guards exist so individual tools don't reimplement substring-match
|
|
5
|
+
* heuristics that need to stay aligned with the registry API's error
|
|
6
|
+
* messaging. Centralizing them here means a single update site if the API
|
|
7
|
+
* error wording changes.
|
|
8
|
+
*/
|
|
9
|
+
import { isValidationError } from '@uluops/registry-sdk/errors';
|
|
10
|
+
/**
|
|
11
|
+
* Detects the "cannot modify in 'published' status" validation error
|
|
12
|
+
* returned by the registry API when the caller targets an already-published
|
|
13
|
+
* version. Used by tools that implement smart-version-up-and-create
|
|
14
|
+
* fallback behavior (update_definition, update_and_publish).
|
|
15
|
+
*
|
|
16
|
+
* NOTE: this is substring-coupled to the API error message format. If the
|
|
17
|
+
* API changes that wording, this guard goes silent and the affected fallback
|
|
18
|
+
* paths stop triggering. Keep this in sync with uluops-registry-api's
|
|
19
|
+
* status-transition validator.
|
|
20
|
+
*/
|
|
21
|
+
export function isPublishedStatusError(error) {
|
|
22
|
+
return (isValidationError(error) &&
|
|
23
|
+
error instanceof Error &&
|
|
24
|
+
error.message.includes("'published' status"));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=error-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-guards.js","sourceRoot":"","sources":["../../src/utils/error-guards.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,iBAAiB,CAAC,KAAK,CAAC;QACxB,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAoDhF;;;;;;;;;;;GAWG;AACH,KAAK,eAAe,GAAG,GAAG,CAAC;AAE3B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAC3B,OAAO,EAAE,CAIP,UAAU,EAAE,eAAe,KACxB,OAAO,CAAC,OAAO,CAAC,EACrB,OAAO,CAAC,EAAE;IACR,sIAAsI;IACtI,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,eAAe,CAAC;IACzD,0FAA0F;IAC1F,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CAC5C,GACA,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,eAAe,CAAC,CAkD7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAWxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC9B,CAiBA;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CA+B7E"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Eliminates boilerplate across tool implementations.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
import { mapSdkErrorToMcp, mapZodErrorToMcp } from '../client/sdk-error-mapper.js';
|
|
8
|
+
import { mapSdkErrorToMcp, mapZodErrorToMcp, sanitizeErrorMessage } from '../client/sdk-error-mapper.js';
|
|
9
9
|
import { normalizeKeys } from './normalize-keys.js';
|
|
10
10
|
import { createSuccessResponse } from '../types/index.js';
|
|
11
11
|
import { getDefaultType } from './session-state.js';
|
|
@@ -33,13 +33,21 @@ function coerceNumericFields(args, schema) {
|
|
|
33
33
|
}
|
|
34
34
|
return obj;
|
|
35
35
|
}
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Check if a Zod schema (possibly wrapped in optional/nullable/default) expects a number.
|
|
38
|
+
* Uses Zod's public unwrap()/removeDefault() API rather than `_def.innerType`
|
|
39
|
+
* to avoid coupling to Zod's private internals — those can rename across
|
|
40
|
+
* minor Zod versions and break numeric coercion without compile-time warning.
|
|
41
|
+
*/
|
|
37
42
|
function isNumericSchema(schema) {
|
|
38
43
|
if (schema instanceof z.ZodNumber)
|
|
39
44
|
return true;
|
|
40
|
-
if (schema instanceof z.ZodOptional
|
|
41
|
-
return isNumericSchema(schema.
|
|
42
|
-
|
|
45
|
+
if (schema instanceof z.ZodOptional)
|
|
46
|
+
return isNumericSchema(schema.unwrap());
|
|
47
|
+
if (schema instanceof z.ZodNullable)
|
|
48
|
+
return isNumericSchema(schema.unwrap());
|
|
49
|
+
if (schema instanceof z.ZodDefault)
|
|
50
|
+
return isNumericSchema(schema.removeDefault());
|
|
43
51
|
return false;
|
|
44
52
|
}
|
|
45
53
|
/** Type guard: checks if a value is a complete MCP tool response (has content array). */
|
|
@@ -90,11 +98,15 @@ export function createToolHandler(schema, sdkCall, options) {
|
|
|
90
98
|
return createSuccessResponse(result);
|
|
91
99
|
}
|
|
92
100
|
catch (error) {
|
|
93
|
-
// Log errors to stderr for debugging (MCP transport uses stdout)
|
|
94
|
-
|
|
101
|
+
// Log errors to stderr for debugging (MCP transport uses stdout).
|
|
102
|
+
// Sanitize through the same credential-redaction filter used for MCP
|
|
103
|
+
// responses — SDK errors may embed API keys, session tokens, or URL
|
|
104
|
+
// userinfo in their messages, and stderr is captured by the harness.
|
|
105
|
+
const rawMsg = error instanceof Error ? error.message : String(error);
|
|
106
|
+
const errorMsg = sanitizeErrorMessage(rawMsg).slice(0, 200);
|
|
95
107
|
const errorType = error instanceof z.ZodError ? 'validation' :
|
|
96
108
|
error instanceof Error ? error.constructor.name : 'unknown';
|
|
97
|
-
process.stderr.write(`[mcp-tool-error] type=${errorType} message=${errorMsg
|
|
109
|
+
process.stderr.write(`[mcp-tool-error] type=${errorType} message=${errorMsg}\n`);
|
|
98
110
|
if (error instanceof z.ZodError) {
|
|
99
111
|
return mapZodErrorToMcp(error);
|
|
100
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handler.js","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-handler.js","sourceRoot":"","sources":["../../src/utils/tool-handler.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.
|
|
3
|
+
"version": "0.2.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",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"test": "vitest run",
|
|
35
35
|
"test:watch": "vitest",
|
|
36
36
|
"test:coverage": "vitest run --coverage",
|
|
37
|
-
"prepublishOnly": "npm run
|
|
37
|
+
"prepublishOnly": "npm run build"
|
|
38
38
|
},
|
|
39
39
|
"keywords": [
|
|
40
40
|
"mcp",
|
|
@@ -60,24 +60,24 @@
|
|
|
60
60
|
"node": ">=18.0.0"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@modelcontextprotocol/sdk": "
|
|
64
|
-
"@uluops/definition-factory": "
|
|
65
|
-
"@uluops/registry-sdk": "0.30.
|
|
66
|
-
"@uluops/sdk-core": "0.11.
|
|
67
|
-
"mcp-secure-server": "
|
|
68
|
-
"zod": "
|
|
63
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
64
|
+
"@uluops/definition-factory": "0.36.0",
|
|
65
|
+
"@uluops/registry-sdk": "0.30.2",
|
|
66
|
+
"@uluops/sdk-core": "0.11.1",
|
|
67
|
+
"mcp-secure-server": "0.0.14-security",
|
|
68
|
+
"zod": "3.25.76"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
|
-
"@eslint/js": "
|
|
72
|
-
"@types/node": "
|
|
73
|
-
"@typescript-eslint/eslint-plugin": "
|
|
74
|
-
"@typescript-eslint/parser": "
|
|
75
|
-
"@vitest/coverage-v8": "
|
|
76
|
-
"eslint": "
|
|
77
|
-
"prettier": "
|
|
78
|
-
"tsx": "
|
|
79
|
-
"typescript": "
|
|
80
|
-
"typescript-eslint": "
|
|
81
|
-
"vitest": "
|
|
71
|
+
"@eslint/js": "9.39.2",
|
|
72
|
+
"@types/node": "22.19.11",
|
|
73
|
+
"@typescript-eslint/eslint-plugin": "8.55.0",
|
|
74
|
+
"@typescript-eslint/parser": "8.55.0",
|
|
75
|
+
"@vitest/coverage-v8": "4.1.8",
|
|
76
|
+
"eslint": "9.39.2",
|
|
77
|
+
"prettier": "3.8.1",
|
|
78
|
+
"tsx": "4.21.0",
|
|
79
|
+
"typescript": "5.9.3",
|
|
80
|
+
"typescript-eslint": "8.55.0",
|
|
81
|
+
"vitest": "4.1.8"
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* sync_models tool
|
|
3
|
-
*
|
|
4
|
-
* Sync model catalog (admin). Calls the registry API directly
|
|
5
|
-
* via native fetch — this is an admin-only endpoint not exposed
|
|
6
|
-
* through the public SDK.
|
|
7
|
-
*/
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
import { type McpServerToolRegistration } from '../types/index.js';
|
|
10
|
-
export declare const SyncModelsInputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
11
|
-
export declare function registerSyncModelsTool(server: McpServerToolRegistration): void;
|
|
12
|
-
//# sourceMappingURL=sync-models.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-models.d.ts","sourceRoot":"","sources":["../../src/tools/sync-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,eAAO,MAAM,qBAAqB,gDAAe,CAAC;AAElD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,yBAAyB,GAChC,IAAI,CA4BN"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* sync_models tool
|
|
3
|
-
*
|
|
4
|
-
* Sync model catalog (admin). Calls the registry API directly
|
|
5
|
-
* via native fetch — this is an admin-only endpoint not exposed
|
|
6
|
-
* through the public SDK.
|
|
7
|
-
*/
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
import { createToolHandler } from '../utils/tool-handler.js';
|
|
10
|
-
export const SyncModelsInputSchema = z.object({});
|
|
11
|
-
export function registerSyncModelsTool(server) {
|
|
12
|
-
server.tool('sync_models', 'Sync the model catalog with upstream providers. Requires admin privileges.', SyncModelsInputSchema.shape, createToolHandler(SyncModelsInputSchema, async () => {
|
|
13
|
-
const baseUrl = process.env['ULUOPS_REGISTRY_URL'] ?? 'https://api.uluops.ai/api/v1/registry';
|
|
14
|
-
const apiKey = process.env['ULUOPS_API_KEY'];
|
|
15
|
-
if (!apiKey) {
|
|
16
|
-
throw new Error('ULUOPS_API_KEY is required for sync_models');
|
|
17
|
-
}
|
|
18
|
-
const res = await fetch(`${baseUrl}/models/sync`, {
|
|
19
|
-
method: 'POST',
|
|
20
|
-
headers: {
|
|
21
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
22
|
-
'Content-Type': 'application/json',
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
if (!res.ok) {
|
|
26
|
-
const body = await res.text();
|
|
27
|
-
throw new Error(`Sync failed (${String(res.status)}): ${body}`);
|
|
28
|
-
}
|
|
29
|
-
return res.json();
|
|
30
|
-
}));
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=sync-models.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-models.js","sourceRoot":"","sources":["../../src/tools/sync-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAElD,MAAM,UAAU,sBAAsB,CACpC,MAAiC;IAEjC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4EAA4E,EAC5E,qBAAqB,CAAC,KAAK,EAC3B,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,uCAAuC,CAAC;QAC9F,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,EAAE;gBACnC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|