We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Chietears/popup-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
import { createI18n } from "vue-i18n";
/**
* 应用内多语言文案定义。
*
* 仅包含纯 UI 层的文本,不包含任何 MCP 工具字段或后端返回内容。
*/
const messages = {
zh: {
app: {
title: "popup-mcp",
headerToolName: "Popup MCP",
idle: {
noRequest: "当前没有来自 MCP 工具的交互请求。",
hint: "当代理调用 ask-user-question 或 confirm-action 工具时,会在此窗口中显示对应的对话框。",
},
queue: {
empty: "队列中没有等待请求",
tailPrefix: "后面还有 {size} 个请求",
kindQuestion: "问卷 {count}",
kindConfirm: "确认 {count}",
tailDetailPrefix: ":",
tailSeparator: " / ",
},
},
question: {
submitStepLabel: "提交",
submitTitle: "确认并提交问卷",
submitSummary:
"共 {total} 题,已回答 {answered} 题,未回答 {unanswered} 题。",
submitStatusAllDone: "所有题目已完成",
submitStatusUnanswered: "还有 {unanswered} 题未回答",
extraInfoLabel: "额外信息(可选)",
extraInfoPlaceholder: "如果你有任何补充说明,可以在这里告诉代理(可选)",
submitPrimaryLabel: "✓ 提交回复",
submitPrimaryDescDone: "提交后将返回结果给调用方",
submitPrimaryDescNotDone: "有未回答的问题,需先完成所有题目",
submitSecondaryLabel: "← 返回修改",
submitSecondaryDesc: "回到上一个问题继续编辑",
summaryTitleChip: "已回答问题",
summaryTitleCount: "共 {answered} 题",
summaryUnansweredHint:
"还有 {unanswered} 题未回答,可通过上方步骤导航回去补充。",
summaryToggleShowQuestion: "查看题面",
summaryToggleHideQuestion: "收起题面",
summaryEmptyHint:
"当前还没有任何已回答的题目,请先在上方步骤中回答问题。",
questionKindMulti: "多选",
questionKindSingle: "单选",
questionTypeMulti: "[多选]",
questionTypeSingle: "[单选]",
optionOtherLabel: "其他",
unanswered: "未回答",
errorPleaseAnswer: '请回答问题:"{question}"',
errorSubmitFailed: "提交回复失败",
errorCancelFailed: "取消操作失败",
errorInvalidOptionCount:
"题目配置错误:每个问题至少需要 2 个选项,请联系工具维护者。",
cancelDialogTitle: "确认取消本次问卷?",
cancelDialogTip:
"你可以简单说明取消原因(可选),这些信息将一并返回给调用方。",
cancelDialogPlaceholder: "例如:问题不适用当前场景 / 信息不完整等",
cancelConfirm: "确认取消",
cancelBack: "返回继续回答",
cancelDialogShortcutEnter: "Enter 确认取消",
cancelDialogShortcutShiftEnter: "Shift+Enter 换行",
cancelDialogShortcutEsc: "Esc 关闭窗口",
shortcutsUpDown: "↑↓ 选项",
shortcutsLeftRight: "←→ 题目/步骤",
shortcutsSpace: "Space 选择",
shortcutsEnter: "Enter 确认/提交",
shortcutsEsc: "Esc 取消",
},
confirm: {
subtitle: "需要你的确认",
},
},
en: {
app: {
title: "popup-mcp",
headerToolName: "Popup MCP",
idle: {
noRequest: "There is currently no interaction request from MCP tools.",
hint: "When the agent calls ask-user-question or confirm-action, the corresponding dialog will appear in this window.",
},
queue: {
empty: "No pending requests in the queue",
tailPrefix: "{size} more request(s) in queue",
kindQuestion: "questionnaire {count}",
kindConfirm: "confirm {count}",
tailDetailPrefix: ": ",
tailSeparator: " / ",
},
},
question: {
submitStepLabel: "Submit",
submitTitle: "Review and submit answers",
submitSummary:
"Total {total} question(s), answered {answered}, unanswered {unanswered}.",
submitStatusAllDone: "All questions are answered",
submitStatusUnanswered: "{unanswered} question(s) still unanswered",
extraInfoLabel: "Extra information (optional)",
extraInfoPlaceholder:
"If you have any additional notes, you can leave them here (optional).",
submitPrimaryLabel: "✓ Submit answers",
submitPrimaryDescDone:
"After submitting, the result will be returned to the caller",
submitPrimaryDescNotDone:
"Some questions are still unanswered, please complete them first",
submitSecondaryLabel: "← Go back and edit",
submitSecondaryDesc:
"Return to the previous question to continue editing",
summaryTitleChip: "Answered questions",
summaryTitleCount: "{answered} in total",
summaryUnansweredHint:
"{unanswered} question(s) still unanswered, you can go back via the steps above.",
summaryToggleShowQuestion: "Show question",
summaryToggleHideQuestion: "Hide question",
summaryEmptyHint:
"No question has been answered yet. Please answer questions in the steps above first.",
questionKindMulti: "Multi",
questionKindSingle: "Single",
questionTypeMulti: "[multi]",
questionTypeSingle: "[single]",
optionOtherLabel: "Other",
unanswered: "Not answered",
errorPleaseAnswer: 'Please answer the question: "{question}"',
errorSubmitFailed: "Failed to submit answers",
errorCancelFailed: "Failed to cancel",
errorInvalidOptionCount:
"Question configuration error: each question must have at least 2 options. Please contact the tool maintainer.",
cancelDialogTitle: "Cancel this questionnaire?",
cancelDialogTip:
"You may briefly describe the reason for cancelling (optional). This information will be returned to the caller.",
cancelDialogPlaceholder:
"For example: not applicable in current context / missing information, etc.",
cancelConfirm: "Confirm cancel",
cancelBack: "Back to questionnaire",
cancelDialogShortcutEnter: "Enter to confirm cancel",
cancelDialogShortcutShiftEnter: "Shift+Enter for newline",
cancelDialogShortcutEsc: "Esc to close dialog",
shortcutsUpDown: "↑↓ Options",
shortcutsLeftRight: "←→ Question / Step",
shortcutsSpace: "Space Select",
shortcutsEnter: "Enter Confirm / Submit",
shortcutsEsc: "Esc Cancel",
},
confirm: {
subtitle: "Confirmation required",
},
},
} as const;
export type SupportedLocale = "zh" | "en";
export function resolveInitialLocale(
override: string | null,
navigatorLanguage: string | null
): SupportedLocale {
if (override === "zh" || override === "en") {
return override;
}
const lang = (navigatorLanguage || "").toLowerCase();
if (lang.startsWith("zh")) {
return "zh";
}
return "en";
}
export function createAppI18n(initialLocale: SupportedLocale) {
return createI18n({
legacy: false,
locale: initialLocale,
fallbackLocale: "en",
messages,
});
}