Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
554b2ca8
authored
May 15, 2025
by
Archer
Committed by
GitHub
May 15, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: mcp tool type (#4820)
parent
4e83840c
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
74 additions
and
61 deletions
+74
-61
packages/global/core/app/mcpTools/utils.ts
+4
-4
packages/global/core/app/type.d.ts
+10
-10
packages/global/core/workflow/runtime/type.d.ts
+5
-2
packages/global/core/workflow/type/node.d.ts
+11
-3
packages/service/core/app/mcp.ts
+2
-2
projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx
+1
-1
projects/app/src/components/core/chat/ChatContainer/PluginRunBox/context.tsx
+2
-1
projects/app/src/pageComponents/app/detail/MCPTools/ChatTest.tsx
+4
-4
projects/app/src/pageComponents/app/detail/MCPTools/Edit.tsx
+5
-5
projects/app/src/pageComponents/app/detail/MCPTools/EditForm.tsx
+7
-7
projects/app/src/pageComponents/app/detail/MCPTools/Header.tsx
+2
-2
projects/app/src/pageComponents/app/detail/MCPTools/index.tsx
+5
-3
projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolSet.tsx
+3
-2
projects/app/src/pageComponents/dashboard/apps/MCPToolsEditModal.tsx
+3
-5
projects/app/src/pages/api/core/app/mcpTools/create.ts
+2
-2
projects/app/src/pages/api/core/app/mcpTools/update.ts
+2
-2
projects/app/src/pages/api/support/mcp/client/getTools.ts
+2
-2
projects/app/src/pages/dashboard/apps/index.tsx
+1
-1
projects/app/src/pages/dataset/list/index.tsx
+1
-1
projects/app/src/web/core/app/api/plugin.ts
+2
-2
No files found.
packages/global/core/app/mcpTools/utils.ts
View file @
554b2ca8
...
...
@@ -5,7 +5,7 @@ import {
FlowNodeTypeEnum
}
from
'../../workflow/node/constant'
;
import
{
nanoid
}
from
'nanoid'
;
import
{
type
Tool
Type
}
from
'../type'
;
import
{
type
McpToolConfig
Type
}
from
'../type'
;
import
{
i18nT
}
from
'../../../../web/i18n/utils'
;
import
{
type
RuntimeNodeItemType
}
from
'../../workflow/runtime/type'
;
...
...
@@ -16,7 +16,7 @@ export const getMCPToolSetRuntimeNode = ({
avatar
}:
{
url
:
string
;
toolList
:
Tool
Type
[];
toolList
:
McpToolConfig
Type
[];
name
?:
string
;
avatar
?:
string
;
}):
RuntimeNodeItemType
=>
{
...
...
@@ -45,7 +45,7 @@ export const getMCPToolRuntimeNode = ({
url
,
avatar
=
'core/app/type/mcpToolsFill'
}:
{
tool
:
Tool
Type
;
tool
:
McpToolConfig
Type
;
url
:
string
;
avatar
?:
string
;
}):
RuntimeNodeItemType
=>
{
...
...
@@ -65,7 +65,7 @@ export const getMCPToolRuntimeNode = ({
...
Object
.
entries
(
tool
.
inputSchema
?.
properties
||
{}).
map
(([
key
,
value
])
=>
({
key
,
label
:
key
,
valueType
:
value
.
type
as
WorkflowIOValueTypeEnum
,
valueType
:
value
.
type
as
WorkflowIOValueTypeEnum
,
// TODO: 这里需要做一个映射
description
:
value
.
description
,
toolDescription
:
value
.
description
||
key
,
required
:
tool
.
inputSchema
?.
required
?.
includes
(
key
)
||
false
,
...
...
packages/global/core/app/type.d.ts
View file @
554b2ca8
...
...
@@ -16,16 +16,6 @@ import { FlowNodeInputTypeEnum } from '../../core/workflow/node/constant';
import
type
{
WorkflowTemplateBasicType
}
from
'@fastgpt/global/core/workflow/type'
;
import
type
{
SourceMemberType
}
from
'../../support/user/type'
;
export
type
ToolType
=
{
name
:
string
;
description
:
string
;
inputSchema
:
{
type
:
string
;
properties
?:
Record
<
string
,
{
type
:
string
;
description
?:
string
}
>
;
required
?:
string
[];
};
};
export
type
AppSchema
=
{
_id
:
string
;
parentId
?:
ParentIdType
;
...
...
@@ -117,6 +107,16 @@ export type AppSimpleEditFormType = {
chatConfig
:
AppChatConfigType
;
};
export
type
McpToolConfigType
=
{
name
:
string
;
description
:
string
;
inputSchema
:
{
type
:
string
;
properties
?:
Record
<
string
,
{
type
:
string
;
description
?:
string
}
>
;
required
?:
string
[];
};
};
/* app chat config type */
export
type
AppChatConfigType
=
{
welcomeText
?:
string
;
...
...
packages/global/core/workflow/runtime/type.d.ts
View file @
554b2ca8
...
...
@@ -7,7 +7,7 @@ import type {
}
from
'../../chat/type'
;
import
{
NodeOutputItemType
}
from
'../../chat/type'
;
import
type
{
FlowNodeInputItemType
,
FlowNodeOutputItemType
}
from
'../type/io.d'
;
import
type
{
StoreNodeItemType
}
from
'../type/node'
;
import
type
{
NodeToolConfigType
,
StoreNodeItemType
}
from
'../type/node'
;
import
type
{
DispatchNodeResponseKeyEnum
}
from
'./constants'
;
import
type
{
StoreEdgeItemType
}
from
'../type/edge'
;
import
type
{
NodeInputKeyEnum
}
from
'../constants'
;
...
...
@@ -102,6 +102,9 @@ export type RuntimeNodeItemType = {
pluginId
?:
string
;
// workflow id / plugin id
version
?:
string
;
// tool
toolConfig
?:
NodeToolConfigType
;
};
export
type
RuntimeEdgeItemType
=
StoreEdgeItemType
&
{
...
...
@@ -114,7 +117,7 @@ export type DispatchNodeResponseType = {
runningTime
?:
number
;
query
?:
string
;
textOutput
?:
string
;
error
?:
Record
<
string
,
any
>
;
error
?:
Record
<
string
,
any
>
|
string
;
customInputs
?:
Record
<
string
,
any
>
;
customOutputs
?:
Record
<
string
,
any
>
;
nodeInputs
?:
Record
<
string
,
any
>
;
...
...
packages/global/core/workflow/type/node.d.ts
View file @
554b2ca8
...
...
@@ -20,11 +20,17 @@ import { RuntimeNodeItemType } from '../runtime/type';
import
{
PluginTypeEnum
}
from
'../../plugin/constants'
;
import
{
RuntimeEdgeItemType
,
StoreEdgeItemType
}
from
'./edge'
;
import
{
NextApiResponse
}
from
'next'
;
import
{
AppDetailType
,
AppSchema
}
from
'../../app/type'
;
import
type
{
AppDetailType
,
AppSchema
,
McpToolConfigType
}
from
'../../app/type'
;
import
type
{
ParentIdType
}
from
'common/parentFolder/type'
;
import
{
AppTypeEnum
}
from
'
core
/app/constants'
;
import
{
AppTypeEnum
}
from
'
../..
/app/constants'
;
import
type
{
WorkflowInteractiveResponseType
}
from
'../template/system/interactive/type'
;
export
type
NodeToolConfigType
=
{
mcpTool
?:
McpToolConfigType
&
{
url
:
string
;
};
};
export
type
FlowNodeCommonType
=
{
parentNodeId
?:
string
;
flowNodeType
:
FlowNodeTypeEnum
;
// render node card
...
...
@@ -46,8 +52,10 @@ export type FlowNodeCommonType = {
// plugin data
pluginId
?:
string
;
isFolder
?:
boolean
;
// pluginType?: AppTypeEnum;
pluginData
?:
PluginDataType
;
// tool data
toolData
?:
NodeToolConfigType
;
};
export
type
PluginDataType
=
{
...
...
packages/service/core/app/mcp.ts
View file @
554b2ca8
import
{
Client
}
from
'@modelcontextprotocol/sdk/client/index.js'
;
import
{
SSEClientTransport
}
from
'@modelcontextprotocol/sdk/client/sse.js'
;
import
{
StreamableHTTPClientTransport
}
from
'@modelcontextprotocol/sdk/client/streamableHttp.js'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
addLog
}
from
'../../common/system/log'
;
import
{
retryFn
}
from
'@fastgpt/global/common/system/utils'
;
...
...
@@ -41,7 +41,7 @@ export class MCPClient {
* Get available tools list
* @returns List of tools
*/
public
async
getTools
():
Promise
<
Tool
Type
[]
>
{
public
async
getTools
():
Promise
<
McpToolConfig
Type
[]
>
{
try
{
const
client
=
await
this
.
getConnection
();
const
response
=
await
client
.
listTools
();
...
...
projects/app/src/components/core/chat/ChatContainer/ChatBox/index.tsx
View file @
554b2ca8
...
...
@@ -553,7 +553,7 @@ const ChatBox = ({
const
responseData
=
mergeChatResponseData
(
item
.
responseData
||
[]);
if
(
responseData
[
responseData
.
length
-
1
]?.
error
)
{
toast
({
title
:
t
(
responseData
[
responseData
.
length
-
1
].
error
?.
message
),
title
:
t
(
getErrText
(
responseData
[
responseData
.
length
-
1
].
error
)
),
status
:
'error'
});
}
...
...
projects/app/src/components/core/chat/ChatContainer/PluginRunBox/context.tsx
View file @
554b2ca8
...
...
@@ -22,6 +22,7 @@ import { ChatRecordContext } from '@/web/core/chat/context/chatRecordContext';
import
{
type
AppFileSelectConfigType
}
from
'@fastgpt/global/core/app/type'
;
import
{
defaultAppSelectFileConfig
}
from
'@fastgpt/global/core/app/constants'
;
import
{
mergeChatResponseData
}
from
'@fastgpt/global/core/chat/utils'
;
import
{
getErrText
}
from
'@fastgpt/global/common/error/utils'
;
type
PluginRunContextType
=
PluginRunBoxProps
&
{
isChatting
:
boolean
;
...
...
@@ -258,7 +259,7 @@ const PluginRunContextProvider = ({
const
responseData
=
mergeChatResponseData
(
item
.
responseData
||
[]);
if
(
responseData
[
responseData
.
length
-
1
]?.
error
)
{
toast
({
title
:
t
(
responseData
[
responseData
.
length
-
1
].
error
?.
message
),
title
:
t
(
getErrText
(
responseData
[
responseData
.
length
-
1
].
error
)
),
status
:
'error'
});
}
...
...
projects/app/src/pageComponents/app/detail/MCPTools/ChatTest.tsx
View file @
554b2ca8
...
...
@@ -7,7 +7,7 @@ import ChatRecordContextProvider from '@/web/core/chat/context/chatRecordContext
import
{
Box
,
Button
,
Flex
,
Switch
,
Textarea
}
from
'@chakra-ui/react'
;
import
{
cardStyles
}
from
'../constants'
;
import
{
useTranslation
}
from
'react-i18next'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
FormLabel
from
'@fastgpt/web/components/common/MyBox/FormLabel'
;
import
QuestionTip
from
'@fastgpt/web/components/common/MyTooltip/QuestionTip'
;
import
{
Controller
,
useForm
}
from
'react-hook-form'
;
...
...
@@ -19,7 +19,7 @@ import { postRunMCPTool } from '@/web/core/app/api/plugin';
const
JsonEditor
=
dynamic
(()
=>
import
(
'@fastgpt/web/components/common/Textarea/JsonEditor'
));
const
ChatTest
=
({
currentTool
,
url
}:
{
currentTool
:
Tool
Type
|
null
;
url
:
string
})
=>
{
const
ChatTest
=
({
currentTool
,
url
}:
{
currentTool
:
McpToolConfig
Type
|
null
;
url
:
string
})
=>
{
const
{
t
}
=
useTranslation
();
const
[
output
,
setOutput
]
=
useState
<
string
>
(
''
);
...
...
@@ -135,7 +135,7 @@ const ChatTest = ({ currentTool, url }: { currentTool: ToolType | null; url: str
);
};
const
Render
=
({
currentTool
,
url
}:
{
currentTool
:
Tool
Type
|
null
;
url
:
string
})
=>
{
const
Render
=
({
currentTool
,
url
}:
{
currentTool
:
McpToolConfig
Type
|
null
;
url
:
string
})
=>
{
const
{
chatId
}
=
useChatStore
();
const
{
appDetail
}
=
useContextSelector
(
AppContext
,
(
v
)
=>
v
);
...
...
@@ -178,7 +178,7 @@ const RenderToolInput = ({
type
:
string
;
description
?:
string
;
};
toolData
:
Tool
Type
|
null
;
toolData
:
McpToolConfig
Type
|
null
;
value
:
any
;
onChange
:
(
value
:
any
)
=>
void
;
isInvalid
:
boolean
;
...
...
projects/app/src/pageComponents/app/detail/MCPTools/Edit.tsx
View file @
554b2ca8
...
...
@@ -7,7 +7,7 @@ import AppCard from './AppCard';
import
ChatTest
from
'./ChatTest'
;
import
MyBox
from
'@fastgpt/web/components/common/MyBox'
;
import
EditForm
from
'./EditForm'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
const
Edit
=
({
url
,
...
...
@@ -19,10 +19,10 @@ const Edit = ({
}:
{
url
:
string
;
setUrl
:
(
url
:
string
)
=>
void
;
toolList
:
Tool
Type
[];
setToolList
:
(
toolList
:
Tool
Type
[])
=>
void
;
currentTool
:
Tool
Type
|
null
;
setCurrentTool
:
(
tool
:
Tool
Type
)
=>
void
;
toolList
:
McpToolConfig
Type
[];
setToolList
:
(
toolList
:
McpToolConfig
Type
[])
=>
void
;
currentTool
:
McpToolConfig
Type
|
null
;
setCurrentTool
:
(
tool
:
McpToolConfig
Type
)
=>
void
;
})
=>
{
const
{
isPc
}
=
useSystem
();
...
...
projects/app/src/pageComponents/app/detail/MCPTools/EditForm.tsx
View file @
554b2ca8
...
...
@@ -7,7 +7,7 @@ import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import
{
AppContext
}
from
'../context'
;
import
{
useContextSelector
}
from
'use-context-selector'
;
import
MyIconButton
from
'@fastgpt/web/components/common/Icon/button'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
MyModal
from
'@fastgpt/web/components/common/MyModal'
;
import
Avatar
from
'@fastgpt/web/components/common/Avatar'
;
import
MyBox
from
'@fastgpt/web/components/common/MyBox'
;
...
...
@@ -24,14 +24,14 @@ const EditForm = ({
}:
{
url
:
string
;
setUrl
:
(
url
:
string
)
=>
void
;
toolList
:
Tool
Type
[];
setToolList
:
(
toolList
:
Tool
Type
[])
=>
void
;
currentTool
:
Tool
Type
|
null
;
setCurrentTool
:
(
tool
:
Tool
Type
)
=>
void
;
toolList
:
McpToolConfig
Type
[];
setToolList
:
(
toolList
:
McpToolConfig
Type
[])
=>
void
;
currentTool
:
McpToolConfig
Type
|
null
;
setCurrentTool
:
(
tool
:
McpToolConfig
Type
)
=>
void
;
})
=>
{
const
{
t
}
=
useTranslation
();
const
[
toolDetail
,
setToolDetail
]
=
useState
<
Tool
Type
|
null
>
(
null
);
const
[
toolDetail
,
setToolDetail
]
=
useState
<
McpToolConfig
Type
|
null
>
(
null
);
const
{
runAsync
:
runGetMCPTools
,
loading
:
isGettingTools
}
=
useRequest2
(
async
(
data
:
getMCPToolsBody
)
=>
await
getMCPTools
(
data
),
...
...
@@ -180,7 +180,7 @@ const EditForm = ({
export
default
React
.
memo
(
EditForm
);
const
ToolDetailModal
=
({
tool
,
onClose
}:
{
tool
:
Tool
Type
;
onClose
:
()
=>
void
})
=>
{
const
ToolDetailModal
=
({
tool
,
onClose
}:
{
tool
:
McpToolConfig
Type
;
onClose
:
()
=>
void
})
=>
{
const
{
t
}
=
useTranslation
();
const
appDetail
=
useContextSelector
(
AppContext
,
(
v
)
=>
v
.
appDetail
);
...
...
projects/app/src/pageComponents/app/detail/MCPTools/Header.tsx
View file @
554b2ca8
...
...
@@ -8,10 +8,10 @@ import { getAppFolderPath } from '@/web/core/app/api/app';
import
{
useCallback
}
from
'react'
;
import
{
useRouter
}
from
'next/router'
;
import
{
useSystemStore
}
from
'@/web/common/system/useSystemStore'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
postUpdateMCPTools
}
from
'@/web/core/app/api/plugin'
;
const
Header
=
({
url
,
toolList
}:
{
url
:
string
;
toolList
:
Tool
Type
[]
})
=>
{
const
Header
=
({
url
,
toolList
}:
{
url
:
string
;
toolList
:
McpToolConfig
Type
[]
})
=>
{
const
{
t
}
=
useTranslation
();
const
appId
=
useContextSelector
(
AppContext
,
(
v
)
=>
v
.
appId
);
const
router
=
useRouter
();
...
...
projects/app/src/pageComponents/app/detail/MCPTools/index.tsx
View file @
554b2ca8
...
...
@@ -5,7 +5,7 @@ import Edit from './Edit';
import
{
useContextSelector
}
from
'use-context-selector'
;
import
{
AppContext
}
from
'../context'
;
import
{
FlowNodeTypeEnum
}
from
'@fastgpt/global/core/workflow/node/constant'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
MCPToolSetData
}
from
'@/pageComponents/dashboard/apps/MCPToolsEditModal'
;
const
MCPTools
=
()
=>
{
...
...
@@ -18,8 +18,10 @@ const MCPTools = () => {
},
[
appDetail
.
modules
]);
const
[
url
,
setUrl
]
=
useState
(
toolSetData
?.
url
||
''
);
const
[
toolList
,
setToolList
]
=
useState
<
ToolType
[]
>
(
toolSetData
?.
toolList
||
[]);
const
[
currentTool
,
setCurrentTool
]
=
useState
<
ToolType
|
null
>
(
toolSetData
?.
toolList
[
0
]
||
null
);
const
[
toolList
,
setToolList
]
=
useState
<
McpToolConfigType
[]
>
(
toolSetData
?.
toolList
||
[]);
const
[
currentTool
,
setCurrentTool
]
=
useState
<
McpToolConfigType
|
null
>
(
toolSetData
?.
toolList
[
0
]
||
null
);
return
(
<
Flex
h=
{
'100%'
}
flexDirection=
{
'column'
}
px=
{
[
3
,
0
]
}
pr=
{
[
3
,
3
]
}
>
...
...
projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolSet.tsx
View file @
554b2ca8
...
...
@@ -5,14 +5,15 @@ import NodeCard from './render/NodeCard';
import
IOTitle
from
'../components/IOTitle'
;
import
Container
from
'../components/Container'
;
import
{
useTranslation
}
from
'react-i18next'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
Box
,
Flex
}
from
'@chakra-ui/react'
;
const
NodeToolSet
=
({
data
,
selected
}:
NodeProps
<
FlowNodeItemType
>
)
=>
{
const
{
t
}
=
useTranslation
();
const
{
inputs
}
=
data
;
const
toolList
:
ToolType
[]
=
inputs
.
find
((
item
)
=>
item
.
key
===
'toolSetData'
)?.
value
?.
toolList
;
const
toolList
:
McpToolConfigType
[]
=
inputs
.
find
((
item
)
=>
item
.
key
===
'toolSetData'
)?.
value
?.
toolList
;
return
(
<
NodeCard
minW=
{
'350px'
}
selected=
{
selected
}
{
...
data
}
>
...
...
projects/app/src/pageComponents/dashboard/apps/MCPToolsEditModal.tsx
View file @
554b2ca8
...
...
@@ -20,17 +20,16 @@ import Avatar from '@fastgpt/web/components/common/Avatar';
import
MyModal
from
'@fastgpt/web/components/common/MyModal'
;
import
MyTooltip
from
'@fastgpt/web/components/common/MyTooltip'
;
import
{
useRequest2
}
from
'@fastgpt/web/hooks/useRequest'
;
import
{
useToast
}
from
'@fastgpt/web/hooks/useToast'
;
import
{
useForm
}
from
'react-hook-form'
;
import
{
useTranslation
}
from
'react-i18next'
;
import
{
AppListContext
}
from
'./context'
;
import
{
useContextSelector
}
from
'use-context-selector'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
type
{
getMCPToolsBody
}
from
'@/pages/api/support/mcp/client/getTools'
;
export
type
MCPToolSetData
=
{
url
:
string
;
toolList
:
Tool
Type
[];
toolList
:
McpToolConfig
Type
[];
};
export
type
EditMCPToolsProps
=
{
...
...
@@ -41,7 +40,6 @@ export type EditMCPToolsProps = {
const
MCPToolsEditModal
=
({
onClose
}:
{
onClose
:
()
=>
void
})
=>
{
const
{
t
}
=
useTranslation
();
const
{
toast
}
=
useToast
();
const
{
parentId
,
loadMyApps
}
=
useContextSelector
(
AppListContext
,
(
v
)
=>
v
);
...
...
@@ -81,7 +79,7 @@ const MCPToolsEditModal = ({ onClose }: { onClose: () => void }) => {
const
{
runAsync
:
runGetMCPTools
,
loading
:
isGettingTools
}
=
useRequest2
(
(
data
:
getMCPToolsBody
)
=>
getMCPTools
(
data
),
{
onSuccess
:
(
res
:
Tool
Type
[])
=>
{
onSuccess
:
(
res
:
McpToolConfig
Type
[])
=>
{
setValue
(
'mcpData.toolList'
,
res
);
},
errorToast
:
t
(
'app:MCP_tools_parse_failed'
)
...
...
projects/app/src/pages/api/core/app/mcpTools/create.ts
View file @
554b2ca8
...
...
@@ -4,7 +4,7 @@ import { TeamAppCreatePermissionVal } from '@fastgpt/global/support/permission/u
import
{
authApp
}
from
'@fastgpt/service/support/permission/app/auth'
;
import
{
authUserPer
}
from
'@fastgpt/service/support/permission/user/auth'
;
import
{
type
CreateAppBody
,
onCreateApp
}
from
'../create'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
mongoSessionRun
}
from
'@fastgpt/service/common/mongo/sessionRun'
;
import
{
AppTypeEnum
}
from
'@fastgpt/global/core/app/constants'
;
import
{
...
...
@@ -22,7 +22,7 @@ export type createMCPToolsBody = Omit<
'type'
|
'modules'
|
'edges'
|
'chatConfig'
>
&
{
url
:
string
;
toolList
:
Tool
Type
[];
toolList
:
McpToolConfig
Type
[];
};
export
type
createMCPToolsResponse
=
{};
...
...
projects/app/src/pages/api/core/app/mcpTools/update.ts
View file @
554b2ca8
import
type
{
ApiRequestProps
,
ApiResponseType
}
from
'@fastgpt/service/type/next'
;
import
{
NextAPI
}
from
'@/service/middleware/entry'
;
import
{
type
AppDetailType
,
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
AppDetailType
,
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
authApp
}
from
'@fastgpt/service/support/permission/app/auth'
;
import
{
ManagePermissionVal
}
from
'@fastgpt/global/support/permission/constant'
;
import
{
FlowNodeTypeEnum
}
from
'@fastgpt/global/core/workflow/node/constant'
;
...
...
@@ -24,7 +24,7 @@ export type updateMCPToolsQuery = {};
export
type
updateMCPToolsBody
=
{
appId
:
string
;
url
:
string
;
toolList
:
Tool
Type
[];
toolList
:
McpToolConfig
Type
[];
};
export
type
updateMCPToolsResponse
=
{};
...
...
projects/app/src/pages/api/support/mcp/client/getTools.ts
View file @
554b2ca8
import
{
NextAPI
}
from
'@/service/middleware/entry'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
type
{
ApiRequestProps
,
ApiResponseType
}
from
'@fastgpt/service/type/next'
;
import
{
MCPClient
}
from
'@fastgpt/service/core/app/mcp'
;
...
...
@@ -7,7 +7,7 @@ export type getMCPToolsQuery = {};
export
type
getMCPToolsBody
=
{
url
:
string
};
export
type
getMCPToolsResponse
=
Tool
Type
[];
export
type
getMCPToolsResponse
=
McpToolConfig
Type
[];
async
function
handler
(
req
:
ApiRequestProps
<
getMCPToolsBody
,
getMCPToolsQuery
>
,
...
...
projects/app/src/pages/dashboard/apps/index.tsx
View file @
554b2ca8
...
...
@@ -262,7 +262,7 @@ const MyApps = ({ MenuIcon }: { MenuIcon: JSX.Element }) => {
{
/* Folder slider */
}
{
!!
folderDetail
&&
isPc
&&
(
<
Box
pt=
{
[
4
,
6
]
}
pr=
{
[
4
,
6
]
}
>
<
Box
pt=
{
[
4
,
6
]
}
pr=
{
[
4
,
6
]
}
h=
{
'100%'
}
pb=
{
4
}
overflow=
{
'auto'
}
>
<
FolderSlideCard
refetchResource=
{
()
=>
Promise
.
all
([
refetchFolderDetail
(),
loadMyApps
()])
}
resumeInheritPermission=
{
()
=>
resumeInheritPer
(
folderDetail
.
_id
)
}
...
...
projects/app/src/pages/dataset/list/index.tsx
View file @
554b2ca8
...
...
@@ -223,7 +223,7 @@ const Dataset = () => {
</
Flex
>
{
!!
folderDetail
&&
isPc
&&
(
<
Box
ml=
"6"
>
<
Box
ml=
"6"
h=
{
'100%'
}
pb=
{
4
}
overflow=
{
'auto'
}
>
<
FolderSlideCard
resumeInheritPermission=
{
()
=>
resumeInheritPer
(
folderDetail
.
_id
)
}
isInheritPermission=
{
folderDetail
.
inheritPermission
}
...
...
projects/app/src/web/core/app/api/plugin.ts
View file @
554b2ca8
...
...
@@ -20,7 +20,7 @@ import type { PluginGroupSchemaType } from '@fastgpt/service/core/app/plugin/typ
import
{
useSystemStore
}
from
'@/web/common/system/useSystemStore'
;
import
{
defaultGroup
}
from
'@fastgpt/web/core/workflow/constants'
;
import
type
{
createMCPToolsBody
}
from
'@/pages/api/core/app/mcpTools/create'
;
import
{
type
Tool
Type
}
from
'@fastgpt/global/core/app/type'
;
import
{
type
McpToolConfig
Type
}
from
'@fastgpt/global/core/app/type'
;
import
type
{
updateMCPToolsBody
}
from
'@/pages/api/core/app/mcpTools/update'
;
import
type
{
RunMCPToolBody
}
from
'@/pages/api/support/mcp/client/runTool'
;
import
type
{
getMCPToolsBody
}
from
'@/pages/api/support/mcp/client/getTools'
;
...
...
@@ -79,7 +79,7 @@ export const postUpdateMCPTools = (data: updateMCPToolsBody) =>
POST
(
'/core/app/mcpTools/update'
,
data
);
export
const
getMCPTools
=
(
data
:
getMCPToolsBody
)
=>
POST
<
Tool
Type
[]
>
(
'/support/mcp/client/getTools'
,
data
);
POST
<
McpToolConfig
Type
[]
>
(
'/support/mcp/client/getTools'
,
data
);
export
const
postRunMCPTool
=
(
data
:
RunMCPToolBody
)
=>
POST
(
'/support/mcp/client/runTool'
,
data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment