) {
command: 'tools/call',
data: {
toolName,
- toolArgs: JSON.parse(JSON.stringify(toolArgs))
+ toolArgs: JSON.parse(JSON.stringify(toolArgs)),
+ callToolOption: {
+ timeout: mcpSetting.timeout * 1000
+ }
}
});
});
diff --git a/renderer/src/components/sidebar/connected.vue b/renderer/src/components/sidebar/connected.vue
index 03b8607..1c4ccd6 100644
--- a/renderer/src/components/sidebar/connected.vue
+++ b/renderer/src/components/sidebar/connected.vue
@@ -2,6 +2,7 @@
-
+
+
+
+
+
+
+
- {{ statusString }}
@@ -35,22 +38,6 @@ defineComponent({ name: 'connected' });
const { t } = useI18n();
-const statusString = computed(() => {
- if (connectionResult.success) {
- return t('connected');
- } else {
- return t('disconnected');
- }
-});
-
-const statusColorStyle = computed(() => {
- if (connectionResult.success) {
- return 'connected-color';
- } else {
- return 'disconnected-color';
- }
-});
-
const fullDisplayServerName = computed(() => {
return connectionResult.serverInfo.name + '/' + connectionResult.serverInfo.version;
});
@@ -88,9 +75,13 @@ function toggleConnectionPanel() {
\ No newline at end of file
diff --git a/renderer/src/hook/mcp.ts b/renderer/src/hook/mcp.ts
index 02b3c6b..5946502 100644
--- a/renderer/src/hook/mcp.ts
+++ b/renderer/src/hook/mcp.ts
@@ -1,3 +1,5 @@
+import { reactive } from "vue";
+
interface TypeAble {
type: string;
}
@@ -27,4 +29,8 @@ export function normaliseJavascriptType(type: string) {
default:
return 'string';
}
-}
\ No newline at end of file
+}
+
+export const mcpSetting = reactive({
+ timeout: 60,
+});
\ No newline at end of file
diff --git a/renderer/src/hook/setting.ts b/renderer/src/hook/setting.ts
index a110d1b..8faa3fd 100644
--- a/renderer/src/hook/setting.ts
+++ b/renderer/src/hook/setting.ts
@@ -3,6 +3,7 @@ import { llmManager, llms } from "@/views/setting/llm";
import { pinkLog } from "@/views/setting/util";
import I18n from '@/i18n/index';
import { userHasReadGuide } from "@/components/guide/tour";
+import { mcpSetting } from "./mcp";
export async function loadSetting() {
const bridge = useMessageBridge();
@@ -14,10 +15,11 @@ export async function loadSetting() {
} else {
const persistConfig = data.msg;
- pinkLog('配置加载成功');
+ pinkLog('配置加载成功');
- llmManager.currentModelIndex = persistConfig.MODEL_INDEX;
- I18n.global.locale.value = persistConfig.LANG;
+ llmManager.currentModelIndex = persistConfig.MODEL_INDEX || 0;
+ I18n.global.locale.value = persistConfig.LANG || 'zh';
+ mcpSetting.timeout = persistConfig.MCP_TIMEOUT_SEC || 60;
persistConfig.LLM_INFO.forEach((element: any) => {
llms.push(element);
@@ -48,7 +50,8 @@ export function saveSetting(saveHandler?: () => void) {
const saveConfig = {
MODEL_INDEX: llmManager.currentModelIndex,
LLM_INFO: JSON.parse(JSON.stringify(llms)),
- LANG: I18n.global.locale.value
+ LANG: I18n.global.locale.value,
+ MCP_TIMEOUT_SEC: mcpSetting.timeout
};
bridge.addCommandListener('setting/save', data => {
diff --git a/renderer/src/hook/type.ts b/renderer/src/hook/type.ts
index f2b9adc..74a5069 100644
--- a/renderer/src/hook/type.ts
+++ b/renderer/src/hook/type.ts
@@ -21,6 +21,8 @@ export interface Content {
uri: string;
mimeType: string;
text: string;
+ blob?: string;
+ [key: string]: any;
}
export interface MessageContent {
@@ -59,12 +61,18 @@ export interface ResourceTemplate {
description: string;
}
+export interface Resources {
+ uri: string;
+ name: string;
+ mimeType: string;
+}
+
export interface ResourceTemplatesListResponse {
resourceTemplates: ResourceTemplate[]
}
export interface ResourcesListResponse {
- resources: any[]; // 根据示例返回空数组,可进一步定义具体类型
+ resources: Resources[]
}
export interface ResourcesReadResponse {
diff --git a/renderer/src/hook/util.ts b/renderer/src/hook/util.ts
index a119385..78a8bda 100644
--- a/renderer/src/hook/util.ts
+++ b/renderer/src/hook/util.ts
@@ -64,6 +64,12 @@ export async function getBlobUrlByFilename(filename: string) {
mimeType = 'image/svg+xml';
break;
}
+
+ const blobUrl = getImageBlobUrlByBase64(base64String, mimeType, filename);
+ return blobUrl;
+}
+
+export function getImageBlobUrlByBase64(base64String: string, mimeType: string, cacheKey?: string) {
const byteCharacters = atob(base64String);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
@@ -73,6 +79,8 @@ export async function getBlobUrlByFilename(filename: string) {
const blob = new Blob([byteArray], { type: mimeType });
const blobUrl = URL.createObjectURL(blob);
// 将结果存入缓存
- blobUrlCache.set(filename, blobUrl);
+ if (cacheKey) {
+ blobUrlCache.set(cacheKey, blobUrl);
+ }
return blobUrl;
}
\ No newline at end of file
diff --git a/renderer/src/i18n/ar.json b/renderer/src/i18n/ar.json
index a991985..8c1221f 100644
--- a/renderer/src/i18n/ar.json
+++ b/renderer/src/i18n/ar.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "عنوان prompt المخصص",
"enter-message-dot": "أدخل الرسالة...",
"generate-answer": "جارٍ إنشاء الإجابة",
- "choose-presetting": "اختر الإعداد المسبق"
+ "choose-presetting": "اختر الإعداد المسبق",
+ "cwd": "دليل التنفيذ",
+ "mcp-server-timeout": "أطول وقت لاستدعاء أداة MCP"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/de.json b/renderer/src/i18n/de.json
index 200934b..853b398 100644
--- a/renderer/src/i18n/de.json
+++ b/renderer/src/i18n/de.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "Titel für benutzerdefinierte Eingabeaufforderung",
"enter-message-dot": "Nachricht eingeben...",
"generate-answer": "Antwort wird generiert",
- "choose-presetting": "Voreinstellung auswählen"
+ "choose-presetting": "Voreinstellung auswählen",
+ "cwd": "Ausführungsverzeichnis",
+ "mcp-server-timeout": "Maximale Aufrufzeit des MCP-Tools"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/en.json b/renderer/src/i18n/en.json
index 106f6a9..07e5f0c 100644
--- a/renderer/src/i18n/en.json
+++ b/renderer/src/i18n/en.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "Title for custom prompt",
"enter-message-dot": "Enter message...",
"generate-answer": "Generating answer",
- "choose-presetting": "Select preset"
+ "choose-presetting": "Select preset",
+ "cwd": "Execution directory",
+ "mcp-server-timeout": "Maximum call time of MCP tool"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/fr.json b/renderer/src/i18n/fr.json
index cb7b28d..6a7c504 100644
--- a/renderer/src/i18n/fr.json
+++ b/renderer/src/i18n/fr.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "Titre de l'invite personnalisée",
"enter-message-dot": "Entrez un message...",
"generate-answer": "Génération de la réponse",
- "choose-presetting": "Sélectionner un préréglage"
+ "choose-presetting": "Sélectionner un préréglage",
+ "cwd": "Répertoire d'exécution",
+ "mcp-server-timeout": "Temps d'appel maximum de l'outil MCP"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/ja.json b/renderer/src/i18n/ja.json
index a3a2f27..aaaa786 100644
--- a/renderer/src/i18n/ja.json
+++ b/renderer/src/i18n/ja.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "カスタムプロンプトのタイトル",
"enter-message-dot": "メッセージを入力...",
"generate-answer": "回答を生成中",
- "choose-presetting": "プリセットを選択"
+ "choose-presetting": "プリセットを選択",
+ "cwd": "実行ディレクトリ",
+ "mcp-server-timeout": "MCPツールの最大呼び出し時間"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/ko.json b/renderer/src/i18n/ko.json
index 3b25bce..8d410c7 100644
--- a/renderer/src/i18n/ko.json
+++ b/renderer/src/i18n/ko.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "사용자 지정 프롬프트 제목",
"enter-message-dot": "메시지를 입력하세요...",
"generate-answer": "답변 생성 중",
- "choose-presetting": "프리셋 선택"
+ "choose-presetting": "프리셋 선택",
+ "cwd": "실행 디렉터리",
+ "mcp-server-timeout": "MCP 도구 최대 호출 시간"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/ru.json b/renderer/src/i18n/ru.json
index 6d5a8b1..413c0c7 100644
--- a/renderer/src/i18n/ru.json
+++ b/renderer/src/i18n/ru.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "Заголовок пользовательского prompt",
"enter-message-dot": "Введите сообщение...",
"generate-answer": "Генерация ответа",
- "choose-presetting": "Выбрать预设"
+ "choose-presetting": "Выбрать预设",
+ "cwd": "Каталог выполнения",
+ "mcp-server-timeout": "Максимальное время вызова инструмента MCP"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/zh-cn.json b/renderer/src/i18n/zh-cn.json
index 10cba07..94cd7fc 100644
--- a/renderer/src/i18n/zh-cn.json
+++ b/renderer/src/i18n/zh-cn.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "输入自定义 prompt 的标题",
"enter-message-dot": "输入消息...",
"generate-answer": "正在生成答案",
- "choose-presetting": "选择预设"
+ "choose-presetting": "选择预设",
+ "cwd": "执行目录",
+ "mcp-server-timeout": "MCP工具最长调用时间"
}
\ No newline at end of file
diff --git a/renderer/src/i18n/zh-tw.json b/renderer/src/i18n/zh-tw.json
index 74bd24e..c9cd7f5 100644
--- a/renderer/src/i18n/zh-tw.json
+++ b/renderer/src/i18n/zh-tw.json
@@ -149,5 +149,7 @@
"add-system-prompt.name-placeholder": "自定義提示的標題",
"enter-message-dot": "輸入訊息...",
"generate-answer": "正在生成答案",
- "choose-presetting": "選擇預設"
+ "choose-presetting": "選擇預設",
+ "cwd": "執行目錄",
+ "mcp-server-timeout": "MCP工具最長調用時間"
}
\ No newline at end of file
diff --git a/renderer/src/views/about/index.vue b/renderer/src/views/about/index.vue
index a8eaf9d..18f95f2 100644
--- a/renderer/src/views/about/index.vue
+++ b/renderer/src/views/about/index.vue
@@ -6,7 +6,7 @@
- OpenMCP Client 0.0.5 由 OpenMCP@锦恢 开发
+ OpenMCP Client 0.0.7 由 OpenMCP@锦恢 开发
diff --git a/renderer/src/views/connect/connection-args.vue b/renderer/src/views/connect/connection-args.vue
index e38d1df..1632b0e 100644
--- a/renderer/src/views/connect/connection-args.vue
+++ b/renderer/src/views/connect/connection-args.vue
@@ -6,13 +6,13 @@
- 命令
+ {{ t("command") }}
- 执行目录
+ {{ t('cwd') }}
diff --git a/renderer/src/views/debug/welcome.vue b/renderer/src/views/debug/welcome.vue
index 44b6266..a342f6b 100644
--- a/renderer/src/views/debug/welcome.vue
+++ b/renderer/src/views/debug/welcome.vue
@@ -139,6 +139,7 @@ function chooseDebugMode(index: number) {
.debug-welcome {
user-select: none;
+ height: 80%;
}
.debug-option.disable {
diff --git a/renderer/src/views/setting/general.vue b/renderer/src/views/setting/general.vue
index 8cbe093..28c0d2a 100644
--- a/renderer/src/views/setting/general.vue
+++ b/renderer/src/views/setting/general.vue
@@ -14,6 +14,19 @@