Compare commits

...

10 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
7eeb136233 Complete fix with screenshots and full testing
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-08 02:21:56 +00:00
copilot-swe-agent[bot]
db1d621a06 Fix export/import for OpenAPI server type and improve handling
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-08 02:18:20 +00:00
copilot-swe-agent[bot]
4affcb72d7 Initial investigation of export/import issue
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-08 02:12:39 +00:00
copilot-swe-agent[bot]
38e274d441 Initial plan 2025-12-08 02:04:27 +00:00
Alptekin Gülcan
ab7c210281 Optimizing API Operations: Simplified operationId Values and Large String Parameter Management (#488) 2025-12-07 13:11:35 +08:00
Copilot
6bd28ec89b Upgrade react and react-dom to 19.2.1 (#489)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-06 15:58:14 +08:00
Copilot
41a42f82d0 Upgrade js-yaml to 4.1.1 (#486)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-05 18:11:26 +08:00
Copilot
7aa3ff3bb1 Upgrade glob to version 10.5.0 (#485)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-05 17:52:46 +08:00
Copilot
71667dab2c Fix validator security vulnerability CVE in isLength() (#484)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-05 17:40:29 +08:00
Copilot
1921a0363b [WIP] Update auth0/node-jws to version 3.2.3 or 4.0.1 (#482)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samanhappy <2755122+samanhappy@users.noreply.github.com>
2025-12-05 17:38:03 +08:00
4 changed files with 203 additions and 161 deletions

View File

@@ -14,6 +14,13 @@ interface McpServerConfig {
type?: string;
url?: string;
headers?: Record<string, string>;
openapi?: {
url?: string;
schema?: Record<string, any>;
version?: string;
security?: any;
passthroughHeaders?: string[];
};
}
interface ImportJsonFormat {
@@ -61,6 +68,34 @@ HTTP example:
}
}
}
}
OpenAPI example (correct format):
{
"mcpServers": {
"openapi-server-example": {
"type": "openapi",
"openapi": {
"url": "http://localhost:3002/openapi.json"
},
"headers": {
"X-API-Key": "your-api-key"
}
}
}
}
OpenAPI example (legacy format, also supported):
{
"mcpServers": {
"openapi-server-legacy": {
"type": "openapi",
"url": "http://localhost:3002/openapi.json",
"headers": {
"X-API-Key": "your-api-key"
}
}
}
}`;
const parseAndValidateJson = (input: string): ImportJsonFormat | null => {
@@ -89,15 +124,34 @@ HTTP example:
// Normalize config to MCPHub format
const normalizedConfig: any = {};
// Handle different server types
if (config.type === 'sse' || config.type === 'streamable-http') {
// SSE and streamable-http servers use top-level url
normalizedConfig.type = config.type;
normalizedConfig.url = config.url;
if (config.headers) {
normalizedConfig.headers = config.headers;
}
} else if (config.type === 'openapi') {
// OpenAPI servers have special handling
normalizedConfig.type = 'openapi';
// Check if openapi configuration is already in correct format
if (config.openapi) {
normalizedConfig.openapi = config.openapi;
} else if (config.url) {
// Legacy format: convert top-level url to openapi.url
normalizedConfig.openapi = {
url: config.url,
};
}
if (config.headers) {
normalizedConfig.headers = config.headers;
}
} else {
// Default to stdio
normalizedConfig.type = 'stdio';
// Command-based servers (stdio or unspecified type)
normalizedConfig.type = config.type || 'stdio';
normalizedConfig.command = config.command;
normalizedConfig.args = config.args || [];
if (config.env) {
@@ -238,6 +292,16 @@ HTTP example:
<strong>{t('server.url')}:</strong> {server.config.url}
</div>
)}
{server.config.openapi?.url && (
<div>
<strong>OpenAPI URL:</strong> {server.config.openapi.url}
</div>
)}
{server.config.openapi?.schema && (
<div>
<strong>OpenAPI Schema:</strong> (Inline schema provided)
</div>
)}
{server.config.env && Object.keys(server.config.env).length > 0 && (
<div>
<strong>{t('server.envVars')}:</strong>{' '}

View File

@@ -60,7 +60,7 @@
"dotenv": "^16.6.1",
"dotenv-expand": "^12.0.2",
"express": "^4.21.2",
"express-validator": "^7.2.1",
"express-validator": "^7.3.1",
"i18next": "^25.5.0",
"i18next-fs-backend": "^2.6.0",
"jsonwebtoken": "^9.0.2",
@@ -110,8 +110,8 @@
"next": "^15.5.0",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"react": "19.2.0",
"react-dom": "19.2.0",
"react": "19.2.1",
"react-dom": "19.2.1",
"react-i18next": "^15.7.2",
"react-router-dom": "^7.8.2",
"supertest": "^7.1.4",
@@ -132,7 +132,10 @@
"pnpm": {
"overrides": {
"brace-expansion@1.1.11": "1.1.12",
"brace-expansion@2.0.1": "2.0.2"
"brace-expansion@2.0.1": "2.0.2",
"glob@10.4.5": "10.5.0",
"js-yaml": "4.1.1",
"jws@3.2.2": "4.0.1"
}
}
}

281
pnpm-lock.yaml generated
View File

@@ -7,6 +7,9 @@ settings:
overrides:
brace-expansion@1.1.11: 1.1.12
brace-expansion@2.0.1: 2.0.2
glob@10.4.5: 10.5.0
js-yaml: 4.1.1
jws@3.2.2: 4.0.1
importers:
@@ -58,8 +61,8 @@ importers:
specifier: ^4.21.2
version: 4.22.0
express-validator:
specifier: ^7.2.1
version: 7.2.1
specifier: ^7.3.1
version: 7.3.1
i18next:
specifier: ^25.5.0
version: 25.6.0(typescript@5.9.2)
@@ -102,10 +105,10 @@ importers:
devDependencies:
'@radix-ui/react-accordion':
specifier: ^1.2.12
version: 1.2.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
version: 1.2.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-slot':
specifier: ^1.2.3
version: 1.2.3(@types/react@19.2.7)(react@19.2.0)
version: 1.2.3(@types/react@19.2.7)(react@19.2.1)
'@shadcn/ui':
specifier: ^0.0.4
version: 0.0.4
@@ -192,10 +195,10 @@ importers:
version: 4.0.0(@jest/globals@30.2.0)(jest@30.2.0(@types/node@24.6.2)(ts-node@10.9.2(@swc/core@1.15.3)(@types/node@24.6.2)(typescript@5.9.2)))(typescript@5.9.2)
lucide-react:
specifier: ^0.552.0
version: 0.552.0(react@19.2.0)
version: 0.552.0(react@19.2.1)
next:
specifier: ^15.5.0
version: 15.5.7(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
version: 15.5.7(@babel/core@7.28.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
postcss:
specifier: ^8.5.6
version: 8.5.6
@@ -203,17 +206,17 @@ importers:
specifier: ^3.6.2
version: 3.6.2
react:
specifier: 19.2.0
version: 19.2.0
specifier: 19.2.1
version: 19.2.1
react-dom:
specifier: 19.2.0
version: 19.2.0(react@19.2.0)
specifier: 19.2.1
version: 19.2.1(react@19.2.1)
react-i18next:
specifier: ^15.7.2
version: 15.7.2(i18next@25.6.0(typescript@5.9.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.2)
version: 15.7.2(i18next@25.6.0(typescript@5.9.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2)
react-router-dom:
specifier: ^7.8.2
version: 7.8.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
version: 7.8.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
supertest:
specifier: ^7.1.4
version: 7.1.4
@@ -2076,9 +2079,6 @@ packages:
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -2573,11 +2573,6 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -2628,8 +2623,8 @@ packages:
peerDependencies:
express: '>= 4.11'
express-validator@7.2.1:
resolution: {integrity: sha512-CjNE6aakfpuwGaHQZ3m8ltCG2Qvivd7RHtVMS/6nVxOM7xVGqr4bhflsm4+N5FP5zI7Zxp+Hae+9RE+o8e3ZOQ==}
express-validator@7.3.1:
resolution: {integrity: sha512-IGenaSf+DnWc69lKuqlRE9/i/2t5/16VpH5bXoqdxWz1aCpRvEdrBuu1y95i/iL5QP8ZYVATiwLFhwk3EDl5vg==}
engines: {node: '>= 8.0.0'}
express@4.22.0:
@@ -2803,8 +2798,8 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
glob@10.5.0:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
glob@7.2.3:
@@ -3187,12 +3182,8 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
js-yaml@4.1.1:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jsesc@3.1.0:
@@ -3230,11 +3221,11 @@ packages:
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
engines: {node: '>=12', npm: '>=6'}
jwa@1.4.2:
resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==}
jwa@2.0.1:
resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==}
jws@3.2.2:
resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==}
jws@4.0.1:
resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@@ -3853,10 +3844,10 @@ packages:
resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
engines: {node: '>= 0.10'}
react-dom@19.2.0:
resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
react-dom@19.2.1:
resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==}
peerDependencies:
react: ^19.2.0
react: ^19.2.1
react-i18next@15.7.2:
resolution: {integrity: sha512-xJxq7ibnhUlMvd82lNC4te1GxGUMoM1A05KKyqoqsBXVZtEvZg/fz/fnVzdlY/hhQ3SpP/79qCocZOtICGhd3g==}
@@ -3898,8 +3889,8 @@ packages:
react-dom:
optional: true
react@19.2.0:
resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
react@19.2.1:
resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==}
engines: {node: '>=0.10.0'}
readable-stream@3.6.2:
@@ -4099,9 +4090,6 @@ packages:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
sql-highlight@6.1.0:
resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==}
engines: {node: '>=14'}
@@ -4481,8 +4469,8 @@ packages:
resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
engines: {node: '>=10.12.0'}
validator@13.12.0:
resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==}
validator@13.15.23:
resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==}
engines: {node: '>= 0.10'}
vary@1.1.2:
@@ -4621,7 +4609,7 @@ snapshots:
'@apidevtools/json-schema-ref-parser@14.0.1':
dependencies:
'@types/json-schema': 7.0.15
js-yaml: 4.1.0
js-yaml: 4.1.1
'@apidevtools/openapi-schemas@2.1.0': {}
@@ -5086,7 +5074,7 @@ snapshots:
globals: 13.24.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.0
js-yaml: 4.1.1
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
@@ -5217,7 +5205,7 @@ snapshots:
camelcase: 5.3.1
find-up: 4.1.0
get-package-type: 0.1.0
js-yaml: 3.14.1
js-yaml: 4.1.1
resolve-from: 5.0.0
'@istanbuljs/schema@0.1.3': {}
@@ -5346,7 +5334,7 @@ snapshots:
chalk: 4.1.2
collect-v8-coverage: 1.0.2
exit-x: 0.2.2
glob: 10.4.5
glob: 10.5.0
graceful-fs: 4.2.11
istanbul-lib-coverage: 3.2.2
istanbul-lib-instrument: 6.0.3
@@ -5547,120 +5535,120 @@ snapshots:
'@radix-ui/primitive@1.1.3': {}
'@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
optionalDependencies:
'@types/react': 19.2.7
'@types/react-dom': 19.1.7(@types/react@19.2.7)
'@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
optionalDependencies:
'@types/react': 19.2.7
'@types/react-dom': 19.1.7(@types/react@19.2.7)
'@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
optionalDependencies:
'@types/react': 19.2.7
'@types/react-dom': 19.1.7(@types/react@19.2.7)
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.1)':
dependencies:
react: 19.2.0
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.1)':
dependencies:
react: 19.2.0
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-direction@1.1.1(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-direction@1.1.1(@types/react@19.2.7)(react@19.2.1)':
dependencies:
react: 19.2.0
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
optionalDependencies:
'@types/react': 19.2.7
'@types/react-dom': 19.1.7(@types/react@19.2.7)
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
optionalDependencies:
'@types/react': 19.2.7
'@types/react-dom': 19.1.7(@types/react@19.2.7)
'@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
'@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.1)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
react: 19.2.0
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.1)
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.0)':
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.1)':
dependencies:
react: 19.2.0
react: 19.2.1
optionalDependencies:
'@types/react': 19.2.7
@@ -6331,10 +6319,6 @@ snapshots:
arg@4.1.3: {}
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
argparse@2.0.1: {}
array-flatten@1.1.1: {}
@@ -6885,7 +6869,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
is-path-inside: 3.0.3
js-yaml: 4.1.0
js-yaml: 4.1.1
json-stable-stringify-without-jsonify: 1.0.1
levn: 0.4.1
lodash.merge: 4.6.2
@@ -6903,8 +6887,6 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 3.4.3
esprima@4.0.1: {}
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -6964,10 +6946,10 @@ snapshots:
dependencies:
express: 5.2.1
express-validator@7.2.1:
express-validator@7.3.1:
dependencies:
lodash: 4.17.21
validator: 13.12.0
validator: 13.15.23
express@4.22.0:
dependencies:
@@ -7210,7 +7192,7 @@ snapshots:
dependencies:
is-glob: 4.0.3
glob@10.4.5:
glob@10.5.0:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
@@ -7486,7 +7468,7 @@ snapshots:
chalk: 4.1.2
ci-info: 4.3.0
deepmerge: 4.3.1
glob: 10.4.5
glob: 10.5.0
graceful-fs: 4.2.11
jest-circus: 30.2.0
jest-docblock: 30.2.0
@@ -7681,7 +7663,7 @@ snapshots:
chalk: 4.1.2
cjs-module-lexer: 2.1.0
collect-v8-coverage: 1.0.2
glob: 10.4.5
glob: 10.5.0
graceful-fs: 4.2.11
jest-haste-map: 30.2.0
jest-message-util: 30.2.0
@@ -7797,12 +7779,7 @@ snapshots:
js-tokens@4.0.0: {}
js-yaml@3.14.1:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
js-yaml@4.1.0:
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -7830,7 +7807,7 @@ snapshots:
jsonwebtoken@9.0.2:
dependencies:
jws: 3.2.2
jws: 4.0.1
lodash.includes: 4.3.0
lodash.isboolean: 3.0.3
lodash.isinteger: 4.0.4
@@ -7841,15 +7818,15 @@ snapshots:
ms: 2.1.3
semver: 7.7.2
jwa@1.4.2:
jwa@2.0.1:
dependencies:
buffer-equal-constant-time: 1.0.1
ecdsa-sig-formatter: 1.0.11
safe-buffer: 5.2.1
jws@3.2.2:
jws@4.0.1:
dependencies:
jwa: 1.4.2
jwa: 2.0.1
safe-buffer: 5.2.1
keyv@4.5.4:
@@ -7955,9 +7932,9 @@ snapshots:
dependencies:
yallist: 3.1.1
lucide-react@0.552.0(react@19.2.0):
lucide-react@0.552.0(react@19.2.1):
dependencies:
react: 19.2.0
react: 19.2.1
magic-string@0.30.21:
dependencies:
@@ -8066,15 +8043,15 @@ snapshots:
neo-async@2.6.2: {}
next@15.5.7(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
next@15.5.7(@babel/core@7.28.4)(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
'@next/env': 15.5.7
'@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001759
postcss: 8.4.31
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.1)
optionalDependencies:
'@next/swc-darwin-arm64': 15.5.7
'@next/swc-darwin-x64': 15.5.7
@@ -8358,40 +8335,40 @@ snapshots:
iconv-lite: 0.7.0
unpipe: 1.0.0
react-dom@19.2.0(react@19.2.0):
react-dom@19.2.1(react@19.2.1):
dependencies:
react: 19.2.0
react: 19.2.1
scheduler: 0.27.0
react-i18next@15.7.2(i18next@25.6.0(typescript@5.9.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.2):
react-i18next@15.7.2(i18next@25.6.0(typescript@5.9.2))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(typescript@5.9.2):
dependencies:
'@babel/runtime': 7.28.3
html-parse-stringify: 3.0.1
i18next: 25.6.0(typescript@5.9.2)
react: 19.2.0
react: 19.2.1
optionalDependencies:
react-dom: 19.2.0(react@19.2.0)
react-dom: 19.2.1(react@19.2.1)
typescript: 5.9.2
react-is@18.3.1: {}
react-refresh@0.17.0: {}
react-router-dom@7.8.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
react-router-dom@7.8.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
react-router: 7.8.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react: 19.2.1
react-dom: 19.2.1(react@19.2.1)
react-router: 7.8.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
react-router@7.8.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
react-router@7.8.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
cookie: 1.1.1
react: 19.2.0
react: 19.2.1
set-cookie-parser: 2.7.1
optionalDependencies:
react-dom: 19.2.0(react@19.2.0)
react-dom: 19.2.1(react@19.2.1)
react@19.2.0: {}
react@19.2.1: {}
readable-stream@3.6.2:
dependencies:
@@ -8681,8 +8658,6 @@ snapshots:
split2@4.2.0: {}
sprintf-js@1.0.3: {}
sql-highlight@6.1.0: {}
stack-utils@2.0.6:
@@ -8744,10 +8719,10 @@ snapshots:
strip-json-comments@3.1.1: {}
styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0):
styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.1):
dependencies:
client-only: 0.0.1
react: 19.2.0
react: 19.2.1
optionalDependencies:
'@babel/core': 7.28.4
@@ -8950,7 +8925,7 @@ snapshots:
debug: 4.4.3
dedent: 1.7.0
dotenv: 16.6.1
glob: 10.4.5
glob: 10.5.0
reflect-metadata: 0.2.2
sha.js: 2.4.12
sql-highlight: 6.1.0
@@ -9023,7 +8998,7 @@ snapshots:
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
validator@13.12.0: {}
validator@13.15.23: {}
vary@1.1.2: {}

View File

@@ -42,7 +42,7 @@ function convertToolSchemaToOpenAPI(tool: Tool): {
(prop: any) =>
prop.type === 'object' ||
prop.type === 'array' ||
(prop.type === 'string' && prop.enum && prop.enum.length > 10),
prop.type === 'string',
);
if (!hasComplexTypes && Object.keys(properties).length <= 10) {
@@ -93,7 +93,7 @@ function generateOperationFromTool(tool: Tool, serverName: string): OpenAPIV3.Op
const operation: OpenAPIV3.OperationObject = {
summary: tool.description || `Execute ${tool.name} tool`,
description: tool.description || `Execute the ${tool.name} tool from ${serverName} server`,
operationId: `${serverName}_${tool.name}`,
operationId: `${tool.name}`,
tags: [serverName],
...(parameters && parameters.length > 0 && { parameters }),
...(requestBody && { requestBody }),