Spaces:
Build error
Build error
| import React, { useState } from "react"; | |
| import { useTranslation } from "react-i18next"; | |
| import { MCPConfig } from "#/types/settings"; | |
| import { I18nKey } from "#/i18n/declaration"; | |
| import { MCPSSEServers } from "./mcp-sse-servers"; | |
| import { MCPStdioServers } from "./mcp-stdio-servers"; | |
| import { MCPJsonEditor } from "./mcp-json-editor"; | |
| import { BrandButton } from "../brand-button"; | |
| interface MCPConfigEditorProps { | |
| mcpConfig?: MCPConfig; | |
| onChange: (config: MCPConfig) => void; | |
| } | |
| export function MCPConfigEditor({ mcpConfig, onChange }: MCPConfigEditorProps) { | |
| const { t } = useTranslation(); | |
| const [isEditing, setIsEditing] = useState(false); | |
| const handleConfigChange = (newConfig: MCPConfig) => { | |
| onChange(newConfig); | |
| setIsEditing(false); | |
| }; | |
| const config = mcpConfig || { sse_servers: [], stdio_servers: [] }; | |
| return ( | |
| <div> | |
| <div className="flex flex-col gap-2 mb-6"> | |
| <div className="text-sm font-medium"> | |
| {t(I18nKey.SETTINGS$MCP_TITLE)} | |
| </div> | |
| <p className="text-xs text-[#A3A3A3]"> | |
| {t(I18nKey.SETTINGS$MCP_DESCRIPTION)} | |
| </p> | |
| </div> | |
| <div className="flex justify-between items-center mb-4"> | |
| <div className="flex items-center"> | |
| <a | |
| href="https://docs.all-hands.dev/usage/mcp" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| className="text-sm text-blue-400 hover:underline mr-3" | |
| onClick={(e) => e.stopPropagation()} | |
| > | |
| Documentation | |
| </a> | |
| <BrandButton | |
| type="button" | |
| variant="primary" | |
| onClick={() => setIsEditing(!isEditing)} | |
| > | |
| {isEditing | |
| ? t(I18nKey.SETTINGS$MCP_CANCEL) | |
| : t(I18nKey.SETTINGS$MCP_EDIT_CONFIGURATION)} | |
| </BrandButton> | |
| </div> | |
| </div> | |
| <div> | |
| {isEditing ? ( | |
| <MCPJsonEditor mcpConfig={mcpConfig} onChange={handleConfigChange} /> | |
| ) : ( | |
| <> | |
| <div className="flex flex-col gap-6"> | |
| <div> | |
| <MCPSSEServers servers={config.sse_servers} /> | |
| </div> | |
| <div> | |
| <MCPStdioServers servers={config.stdio_servers} /> | |
| </div> | |
| </div> | |
| {config.sse_servers.length === 0 && | |
| config.stdio_servers.length === 0 && ( | |
| <div className="mt-4 p-2 bg-yellow-50 border border-yellow-200 rounded-md text-sm text-yellow-700"> | |
| {t(I18nKey.SETTINGS$MCP_NO_SERVERS_CONFIGURED)} | |
| </div> | |
| )} | |
| </> | |
| )} | |
| </div> | |
| </div> | |
| ); | |
| } | |