gildas-lormeau/SingleFile · error · Error
data.error.message
Error message
data.error.message
What it means
After a successful HTTP response, writeFile() parses the JSON body and throws this error if the MCP server responded with a JSON-RPC error object (data.error). Unlike error 50, the transport succeeded but the server rejected the request at the protocol level; the message comes straight from data.error.message.
Source
Thrown at src/lib/mcp/mcp.js:190
const headers = {
[CONTENT_TYPE_HEADER]: JSON_CONTENT_TYPE,
"Accept": "application/json, text/event-stream"
};
if (authToken) {
headers.Authorization = `Bearer ${authToken}`;
}
const response = await fetch(serverUrl, {
method: "POST",
headers,
body: JSON.stringify(requestBody),
signal
});
if (!response.ok) {
throw new Error(`MCP server error: ${response.status} ${response.statusText}`);
}
const data = await response.json();
if (data.error) {
throw new Error(data.error.message);
}
return { success: true };
}
function splitFilename(filename) {
let filenameWithoutExtension = filename;
let extension = EMPTY_STRING;
const indexExtensionSeparator = filename.lastIndexOf(EXTENSION_SEPARATOR);
if (indexExtensionSeparator > -1) {
filenameWithoutExtension = filename.substring(0, indexExtensionSeparator);
extension = filename.substring(indexExtensionSeparator + 1);
}
let indexFilename;
({ filenameWithoutExtension, indexFilename } = extractIndexFilename(filenameWithoutExtension));
return { filenameWithoutExtension, extension, indexFilename };
}
function extractIndexFilename(filenameWithoutExtension) {View on GitHub (pinned to 517fb7c5cf)
Solutions
- Inspect data.error.message (and data.error.code/data) — it contains the server's actual rejection reason
- Validate the JSON-RPC payload (method name and params) against the MCP server's advertised capabilities/tools list
- Confirm the authenticated server identity has permission to write the target resource
- Upgrade/downgrade client or server so method names and params match the negotiated protocol version
Example fix
// before
if (data.error) {
throw new Error(data.error.message);
}
// after
if (data.error) {
const err = new Error(`MCP ${data.error.code ?? ""}: ${data.error.message}`);
err.data = data.error.data;
throw err;
} Defensive patterns
Strategy: type-guard
Validate before calling
const spec = await fetch(`${mcpServerUrl}/capabilities`).then(r => r.json());
if (!spec.tools?.includes(requestedMethod)) throw new Error(`Method ${requestedMethod} not supported by MCP server`); Type guard
function hasRpcError(data) {
return data !== null && typeof data === "object" && "error" in data &&
data.error !== null && typeof data.error === "object" && typeof data.error.message === "string";
} Try / catch
try {
await writeFile(path, content);
} catch (e) {
// error message came from data.error.message; log server-side detail
console.error("MCP request rejected:", e.message);
if (/permission|forbidden/i.test(e.message)) throw new Error(`No write access for ${path}`);
throw e;
} Prevention
- Validate request params against the MCP server's advertised schema before sending
- Negotiate/verify protocol version with the server
- Check server-side permissions for the authenticated identity
- Include data.error.code/data when rethrowing for better diagnostics
When it happens
Trigger: The MCP server returns HTTP 200 with a body like {"error":{"message":"..."}}: invalid JSON-RPC method name, malformed params, permission denied for the write operation, or the target file/resource is not writable by the server.
Common situations: Calling a tool/resource name the MCP server does not expose; sending params that fail server-side schema validation; the server account lacking write permissions on the target path; MCP server version mismatch where the method was renamed.
Related errors
- error.message + " (MCP)"
- response.error
- response.error
- writeResponse.error || "Failed to write file via MCP"
- MCP server error: ${response.status} ${response.statusText}
AI-assisted analysis of gildas-lormeau/SingleFile@517fb7c5cf (2026-09-01).
Data as JSON: /api/errors/63fa596ff28d99a5.
Report an issue: GitHub.