support mcp client streamable http (#4650)

* support mcp streamable http

* fix

* fix

* remove deps
This commit is contained in:
heheer
2025-04-24 23:04:54 +08:00
committed by GitHub
parent 5c93545016
commit 2a54be4d91
16 changed files with 273 additions and 144 deletions

View File

@@ -2,10 +2,9 @@ import {
DispatchNodeResultType,
ModuleDispatchProps
} from '@fastgpt/global/core/workflow/runtime/type';
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { DispatchNodeResponseKeyEnum } from '@fastgpt/global/core/workflow/runtime/constants';
import { NodeOutputKeyEnum } from '@fastgpt/global/core/workflow/constants';
import getMCPClient from '../../../app/mcp';
type RunToolProps = ModuleDispatchProps<{
toolData: {
@@ -27,34 +26,21 @@ export const dispatchRunTool = async (props: RunToolProps): Promise<RunToolRespo
const { toolData, ...restParams } = params;
const { name: toolName, url } = toolData;
const client = new Client({
name: 'FastGPT-MCP-client',
version: '1.0.0'
});
const mcpClient = getMCPClient({ url });
const result = await (async () => {
try {
const transport = new SSEClientTransport(new URL(url));
await client.connect(transport);
try {
const result = await mcpClient.toolCall(toolName, restParams);
return await client.callTool({
name: toolName,
arguments: restParams
});
} catch (error) {
console.error('Error running MCP tool:', error);
return Promise.reject(error);
} finally {
await client.close();
}
})();
return {
[DispatchNodeResponseKeyEnum.nodeResponse]: {
toolRes: result,
moduleLogo: avatar
},
[DispatchNodeResponseKeyEnum.toolResponses]: result,
[NodeOutputKeyEnum.rawResponse]: result
};
return {
[DispatchNodeResponseKeyEnum.nodeResponse]: {
toolRes: result,
moduleLogo: avatar
},
[DispatchNodeResponseKeyEnum.toolResponses]: result,
[NodeOutputKeyEnum.rawResponse]: result
};
} catch (error) {
console.error('Error running MCP tool:', error);
return Promise.reject(error);
}
};