CherryHQ/cherry-studio · error · Error
Invalid manifest: missing server.mcp_config
Error message
Invalid manifest: missing server.mcp_config
What it means
Thrown during manifest validation when the server object exists but has no mcp_config field. The mcp_config object holds the command, args, and env that the service ultimately resolves via applyPlatformOverrides and uses to spawn the MCP server process. server.type and server.entry_point are present in the type but mcp_config is the load-bearing field for launch.
Source
Thrown at src/main/ai/mcp/McpPackageService.ts:559
}
manifest = { ...parsedManifest, manifest_version: parsedManifest.manifest_version }
} else {
if (!parsedManifest.dxt_version) {
throw new Error('Invalid manifest: missing dxt_version')
}
manifest = { ...parsedManifest, dxt_version: parsedManifest.dxt_version }
}
if (!manifest.name) {
throw new Error('Invalid manifest: missing name')
}
if (!manifest.version) {
throw new Error('Invalid manifest: missing version')
}
if (!manifest.server) {
throw new Error('Invalid manifest: missing server configuration')
}
if (!manifest.server.mcp_config) {
throw new Error('Invalid manifest: missing server.mcp_config')
}
if (!manifest.server.mcp_config.command) {
throw new Error('Invalid manifest: missing server.mcp_config.command')
}
if (!Array.isArray(manifest.server.mcp_config.args)) {
throw new Error('Invalid manifest: server.mcp_config.args must be an array')
}
// Use server name as the final extract directory for automatic version management
const serverDirName = `server-${manifest.name}`
const finalExtractDir = ensurePathWithin(this.mcpDir, path.join(this.mcpDir, serverDirName))
// Stage the new package first, then swap directories so a failed install
// does not destroy the last working version.
await this.replacePackageDirectory(tempExtractDir, finalExtractDir, serverDirName)
logger.debug(`${packageLabel} server extracted to: ${finalExtractDir}`)
// Clean up the uploaded package file if it's in temp directoryView on GitHub (pinned to 726446b54c)
Solutions
- Add server.mcp_config with at minimum { command, args } so the service knows how to launch the server.
- If you intended to use entry_point only, note that this service still requires mcp_config; set command to the runtime (e.g. "node") and args to ["${__dirname}/<entry_point>"] referencing server.entry_point.
- Repackage and re-upload.
Example fix
// manifest.json - before
"server": { "type": "node", "entry_point": "./server.js" }
// after
"server": { "type": "node", "entry_point": "./server.js",
"mcp_config": { "command": "node", "args": ["${__dirname}/server.js"] } } Defensive patterns
Strategy: validation
Validate before calling
function serverHasMcpConfig(manifest: any): boolean {
return !!manifest?.server && typeof manifest.server.mcp_config === 'object' && manifest.server.mcp_config !== null
} Type guard
function hasMcpConfig(m: any): m is { server: { mcp_config: object } } {
return !!m?.server && typeof m.server.mcp_config === 'object' && m.server.mcp_config !== null
} Prevention
- Always include server.mcp_config with at least { command, args } when authoring a manifest.
- Validate the manifest against the published JSON Schema in CI so a missing mcp_config fails the build.
- If you only set entry_point, remember this service still requires mcp_config; set command to the runtime and args to the entry point.
When it happens
Trigger: manifest.json has a server object that includes type and entry_point but omits mcp_config, or sets it to null. The author may have assumed entry_point alone is enough to launch.
Common situations: Schema confusion: an author who saw both entry_point and mcp_config in examples included only entry_point; a generator that emits server but leaves mcp_config for the user to fill; a manifest copied from a runtime (e.g. Claude Desktop) that nests config under a different key.
Related errors
- Invalid command: command must be a non-empty string
- Invalid command: command cannot be empty
- Invalid args: must be an array
- Invalid args: argument at index ${index} must be a string
- Invalid args: path traversal detected in argument at index $
AI-assisted analysis of CherryHQ/cherry-studio@726446b54c (2026-08-12).
Data as JSON: /api/errors/7a96e310a809128f.
Report an issue: GitHub.