@ratio-mcp-qa/docs-server 1.0.1
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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/oauth.json +71 -0
- package/dist/schemas/orders.json +167 -0
- package/dist/schemas/products.json +167 -0
- package/dist/schemas/schemas/oauth.json +71 -0
- package/dist/schemas/schemas/orders.json +167 -0
- package/dist/schemas/schemas/products.json +167 -0
- package/dist/schemas/schemas/scopes.json +52 -0
- package/dist/schemas/schemas/webhooks.json +69 -0
- package/dist/schemas/scopes.json +52 -0
- package/dist/schemas/webhooks.json +69 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +53 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/get-api-reference.d.ts +60 -0
- package/dist/tools/get-api-reference.d.ts.map +1 -0
- package/dist/tools/get-api-reference.js +53 -0
- package/dist/tools/get-api-reference.js.map +1 -0
- package/dist/tools/get-scope-map.d.ts +17 -0
- package/dist/tools/get-scope-map.d.ts.map +1 -0
- package/dist/tools/get-scope-map.js +102 -0
- package/dist/tools/get-scope-map.js.map +1 -0
- package/dist/tools/get-scopes.d.ts +63 -0
- package/dist/tools/get-scopes.d.ts.map +1 -0
- package/dist/tools/get-scopes.js +72 -0
- package/dist/tools/get-scopes.js.map +1 -0
- package/dist/tools/get-webhooks.d.ts +30 -0
- package/dist/tools/get-webhooks.d.ts.map +1 -0
- package/dist/tools/get-webhooks.js +32 -0
- package/dist/tools/get-webhooks.js.map +1 -0
- package/dist/tools/index.d.ts +15 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +110 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lookup-docs.d.ts +58 -0
- package/dist/tools/lookup-docs.d.ts.map +1 -0
- package/dist/tools/lookup-docs.js +181 -0
- package/dist/tools/lookup-docs.js.map +1 -0
- package/dist/tools/validate-code.d.ts +12 -0
- package/dist/tools/validate-code.d.ts.map +1 -0
- package/dist/tools/validate-code.js +185 -0
- package/dist/tools/validate-code.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +85 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/schema-loader.d.ts +13 -0
- package/dist/utils/schema-loader.d.ts.map +1 -0
- package/dist/utils/schema-loader.js +61 -0
- package/dist/utils/schema-loader.js.map +1 -0
- package/dist/utils/zod-to-json.d.ts +7 -0
- package/dist/utils/zod-to-json.d.ts.map +1 -0
- package/dist/utils/zod-to-json.js +63 -0
- package/dist/utils/zod-to-json.js.map +1 -0
- package/package.json +26 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
/**
|
|
8
|
+
* Path to schemas directory (relative to this file's location in dist/utils/)
|
|
9
|
+
*/
|
|
10
|
+
const SCHEMAS_DIR = join(__dirname, '..', 'schemas');
|
|
11
|
+
/**
|
|
12
|
+
* In-memory cache for loaded schemas
|
|
13
|
+
*/
|
|
14
|
+
const cache = new Map();
|
|
15
|
+
function loadJson(filename) {
|
|
16
|
+
const cached = cache.get(filename);
|
|
17
|
+
if (cached)
|
|
18
|
+
return cached;
|
|
19
|
+
const filePath = join(SCHEMAS_DIR, filename);
|
|
20
|
+
try {
|
|
21
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
22
|
+
const parsed = JSON.parse(raw);
|
|
23
|
+
cache.set(filename, parsed);
|
|
24
|
+
logger.debug(`Loaded schema: ${filename}`);
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
logger.error(`Failed to load schema: ${filename}`, err);
|
|
29
|
+
throw new Error(`Schema not found: ${filename}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function loadResourceSchema(resource) {
|
|
33
|
+
return loadJson(`${resource}.json`);
|
|
34
|
+
}
|
|
35
|
+
export function loadWebhooks() {
|
|
36
|
+
return loadJson('webhooks.json');
|
|
37
|
+
}
|
|
38
|
+
export function loadOAuth() {
|
|
39
|
+
return loadJson('oauth.json');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get list of available resource schema files (excludes oauth.json and webhooks.json)
|
|
43
|
+
*/
|
|
44
|
+
export function getAvailableResourceFiles() {
|
|
45
|
+
const EXCLUDED = ['oauth.json', 'webhooks.json'];
|
|
46
|
+
try {
|
|
47
|
+
return readdirSync(SCHEMAS_DIR)
|
|
48
|
+
.filter((f) => f.endsWith('.json') && !EXCLUDED.includes(f))
|
|
49
|
+
.map((f) => f.replace('.json', ''));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Clear the cache (useful for testing)
|
|
57
|
+
*/
|
|
58
|
+
export function clearCache() {
|
|
59
|
+
cache.clear();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=schema-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-loader.js","sourceRoot":"","sources":["../../src/utils/schema-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEzC,SAAS,QAAQ,CAAI,QAAgB;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM;QAAE,OAAO,MAAW,CAAC;IAE/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;QACpC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,0BAA0B,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,QAAQ,CAAiB,GAAG,QAAQ,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,QAAQ,CAAiB,eAAe,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAc,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,WAAW,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Simple Zod-to-JSON-Schema converter for MCP tool registration.
|
|
4
|
+
* Handles the common cases used in our tool definitions.
|
|
5
|
+
*/
|
|
6
|
+
export declare function zodToJsonSchema(schema: z.ZodType): Record<string, unknown>;
|
|
7
|
+
//# sourceMappingURL=zod-to-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-to-json.d.ts","sourceRoot":"","sources":["../../src/utils/zod-to-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE1E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple Zod-to-JSON-Schema converter for MCP tool registration.
|
|
3
|
+
* Handles the common cases used in our tool definitions.
|
|
4
|
+
*/
|
|
5
|
+
export function zodToJsonSchema(schema) {
|
|
6
|
+
return convertZodType(schema);
|
|
7
|
+
}
|
|
8
|
+
function convertZodType(schema) {
|
|
9
|
+
const def = schema._def;
|
|
10
|
+
const typeName = def.typeName;
|
|
11
|
+
switch (typeName) {
|
|
12
|
+
case 'ZodObject': {
|
|
13
|
+
const shape = schema.shape;
|
|
14
|
+
const properties = {};
|
|
15
|
+
const required = [];
|
|
16
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
17
|
+
const fieldDef = value._def;
|
|
18
|
+
const isOptional = fieldDef.typeName === 'ZodOptional';
|
|
19
|
+
const innerType = isOptional ? fieldDef.innerType : value;
|
|
20
|
+
properties[key] = convertZodType(innerType);
|
|
21
|
+
// Add description from .describe()
|
|
22
|
+
const desc = fieldDef.description || innerType._def.description;
|
|
23
|
+
if (desc) {
|
|
24
|
+
properties[key].description = desc;
|
|
25
|
+
}
|
|
26
|
+
if (!isOptional) {
|
|
27
|
+
required.push(key);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const result = { type: 'object', properties };
|
|
31
|
+
if (required.length > 0)
|
|
32
|
+
result.required = required;
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
case 'ZodString':
|
|
36
|
+
return { type: 'string' };
|
|
37
|
+
case 'ZodNumber':
|
|
38
|
+
return { type: 'number' };
|
|
39
|
+
case 'ZodBoolean':
|
|
40
|
+
return { type: 'boolean' };
|
|
41
|
+
case 'ZodArray': {
|
|
42
|
+
const itemType = def.type || def.innerType;
|
|
43
|
+
return { type: 'array', items: convertZodType(itemType) };
|
|
44
|
+
}
|
|
45
|
+
case 'ZodEnum': {
|
|
46
|
+
const values = def.values;
|
|
47
|
+
return { type: 'string', enum: values };
|
|
48
|
+
}
|
|
49
|
+
case 'ZodOptional': {
|
|
50
|
+
const inner = def.innerType;
|
|
51
|
+
return convertZodType(inner);
|
|
52
|
+
}
|
|
53
|
+
case 'ZodDefault': {
|
|
54
|
+
const inner = def.innerType;
|
|
55
|
+
const result = convertZodType(inner);
|
|
56
|
+
result.default = def.defaultValue;
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
default:
|
|
60
|
+
return { type: 'string' };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=zod-to-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod-to-json.js","sourceRoot":"","sources":["../../src/utils/zod-to-json.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,GAAG,GAAI,MAAuD,CAAC,IAAI,CAAC;IAC1E,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAkB,CAAC;IAExC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAI,MAAiD,CAAC,KAAK,CAAC;YACvE,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAI,KAAsD,CAAC,IAAI,CAAC;gBAC9E,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,KAAK,aAAa,CAAC;gBACvD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAE,QAAQ,CAAC,SAAuB,CAAC,CAAC,CAAE,KAAmB,CAAC;gBAExF,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAE5C,mCAAmC;gBACnC,MAAM,IAAI,GAAI,QAAQ,CAAC,WAAsB,IAAM,SAA0D,CAAC,IAAI,CAAC,WAAsB,CAAC;gBAC1I,IAAI,IAAI,EAAE,CAAC;oBACR,UAAU,CAAC,GAAG,CAA6B,CAAC,WAAW,GAAG,IAAI,CAAC;gBAClE,CAAC;gBAED,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;YACvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAE5B,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAE5B,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAE7B,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,QAAQ,GAAI,GAAG,CAAC,IAAkB,IAAK,GAAG,CAAC,SAAuB,CAAC;YACzE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,MAAkB,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1C,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAsB,CAAC;YACzC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAsB,CAAC;YACzC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED;YACE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ratio-mcp-qa/docs-server",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"files": ["dist"],
|
|
7
|
+
"bin": {
|
|
8
|
+
"ratio-docs-server": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc && cp -r src/schemas dist/schemas",
|
|
12
|
+
"dev": "node --loader ts-node/esm src/index.ts",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"typecheck": "tsc --noEmit",
|
|
15
|
+
"prepublishOnly": "pnpm build"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
19
|
+
"@ratio-mcp-qa/shared": "^1.0.1",
|
|
20
|
+
"zod": "^3.23.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^20.0.0",
|
|
24
|
+
"typescript": "^5.4.0"
|
|
25
|
+
}
|
|
26
|
+
}
|