Skip to content

Commit 4147114

Browse files
committed
Add validation and i18n for MCP image settings
- Add input validation for max images per response (1-100 range) - Add input validation for max image size in MB (1-100 range) - Display error messages for invalid inputs - Internationalize all image settings labels and descriptions - Update translations across all supported locales
1 parent 60e86b4 commit 4147114

File tree

19 files changed

+168
-12
lines changed

19 files changed

+168
-12
lines changed

webview-ui/src/components/mcp/McpView.tsx

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ const McpView = ({ onDone }: McpViewProps) => {
5353
} = useExtensionState()
5454

5555
const { t } = useAppTranslation()
56+
const [maxImagesError, setMaxImagesError] = useState("")
57+
const [maxSizeError, setMaxSizeError] = useState("")
5658

5759
return (
5860
<Tab>
@@ -117,43 +119,71 @@ const McpView = ({ onDone }: McpViewProps) => {
117119
<VSCodeTextField
118120
value={mcpMaxImagesPerResponse.toString()}
119121
onChange={(e: any) => {
120-
const value = parseInt(e.target.value) || 20
121-
setMcpMaxImagesPerResponse(value)
122-
vscode.postMessage({ type: "mcpMaxImagesPerResponse", value })
122+
const value = e.target.value
123+
if (value === "") {
124+
setMaxImagesError("")
125+
return
126+
}
127+
const numValue = parseInt(value, 10)
128+
if (isNaN(numValue) || numValue < 1 || numValue > 100) {
129+
setMaxImagesError(t("mcp:imageSettings.validationError"))
130+
} else {
131+
setMaxImagesError("")
132+
setMcpMaxImagesPerResponse(numValue)
133+
vscode.postMessage({ type: "mcpMaxImagesPerResponse", value: numValue })
134+
}
123135
}}
124136
style={{ width: "100px" }}>
125-
Max Images Per Response
137+
{t("mcp:imageSettings.maxImagesLabel")}
126138
</VSCodeTextField>
139+
{maxImagesError && (
140+
<div style={{ color: "red", fontSize: "12px", marginTop: "5px" }}>
141+
{maxImagesError}
142+
</div>
143+
)}
127144
<div
128145
style={{
129146
fontSize: "12px",
130147
marginTop: "5px",
131148
color: "var(--vscode-descriptionForeground)",
132149
}}>
133-
The maximum number of images that can be returned in a single MCP tool response.
134-
Additional images will be ignored to prevent performance issues.
150+
{t("mcp:imageSettings.maxImagesDescription")}
135151
</div>
136152
</div>
137153

138154
<div style={{ marginBottom: 10 }}>
139155
<VSCodeTextField
140156
value={mcpMaxImageSizeMB.toString()}
141157
onChange={(e: any) => {
142-
const value = parseFloat(e.target.value) || 10
143-
setMcpMaxImageSizeMB(value)
144-
vscode.postMessage({ type: "mcpMaxImageSizeMB", value })
158+
const value = e.target.value
159+
if (value === "") {
160+
setMaxSizeError("")
161+
return
162+
}
163+
const numValue = parseFloat(value)
164+
if (isNaN(numValue) || numValue < 1 || numValue > 100) {
165+
setMaxSizeError(t("mcp:imageSettings.validationError"))
166+
} else {
167+
setMaxSizeError("")
168+
setMcpMaxImageSizeMB(numValue)
169+
vscode.postMessage({ type: "mcpMaxImageSizeMB", value: numValue })
170+
}
145171
}}
146172
style={{ width: "100px" }}>
147-
Max Image Size (MB)
173+
{t("mcp:imageSettings.maxSizeLabel")}
148174
</VSCodeTextField>
175+
{maxSizeError && (
176+
<div style={{ color: "red", fontSize: "12px", marginTop: "5px" }}>
177+
{maxSizeError}
178+
</div>
179+
)}
149180
<div
150181
style={{
151182
fontSize: "12px",
152183
marginTop: "5px",
153184
color: "var(--vscode-descriptionForeground)",
154185
}}>
155-
The maximum size (in MB) for a single base64-encoded image from an MCP tool
156-
response. Images exceeding this size will be ignored.
186+
{t("mcp:imageSettings.maxSizeDescription")}
157187
</div>
158188
</div>
159189
</div>

webview-ui/src/i18n/locales/ca/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/de/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/en/mcp.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,12 @@
6161
"running": "Running",
6262
"completed": "Completed",
6363
"error": "Error"
64+
},
65+
"imageSettings": {
66+
"maxImagesLabel": "Max Images",
67+
"maxImagesDescription": "The maximum number of images that can be included in a single request.",
68+
"maxSizeLabel": "Max Size (MB)",
69+
"maxSizeDescription": "The maximum file size for each image, in megabytes.",
70+
"validationError": "Please enter a valid number between 1 and 100."
6471
}
6572
}

webview-ui/src/i18n/locales/es/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/fr/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/hi/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/id/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/it/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webview-ui/src/i18n/locales/ja/mcp.json

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)