mirror of
https://github.com/samanhappy/mcphub.git
synced 2025-12-24 10:49:35 -05:00
Compare commits
5 Commits
v0.11.4
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7eeb136233 | ||
|
|
db1d621a06 | ||
|
|
4affcb72d7 | ||
|
|
38e274d441 | ||
|
|
ab7c210281 |
@@ -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>{' '}
|
||||
|
||||
@@ -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 }),
|
||||
|
||||
Reference in New Issue
Block a user