When using dxt pack (from @anthropic-ai/dxt npm package), and when using it specifically for a manifest configured for a binary, the dxt-packaged binary loses its execution permissions, such that when Claude Desktop goes to run the binary from its new .../Claude Extensions/... location, it encounters EACCES errors. (Notice below the -rwxr-xr-x and 755 confirming execution perms)
$ ls
fluree_favicon.png manifest.json nexus-mcp-server
$ ls -la nexus-mcp-server
-rwxr-xr-x@ 1 ajohnson staff 13495120 Jun 27 10:30 nexus-mcp-server
$ stat -f "%A %N" ./nexus-mcp-server
755 ./nexus-mcp-server
$ dxt pack
Validating manifest...
Manifest is valid!
📦 fluree-mcp-server@1.0.0
Archive Contents
1.7kB fluree_favicon.png
2.1kB manifest.json
12.9MB nexus-mcp-server
Archive Details
name: fluree-mcp-server
version: 1.0.0
filename: fluree-mcp-server-1.0.0.dxt
package size: 5.0MB
unpacked size: 12.9MB
shasum: ea68fdf696dd4ac3a4c10bb8c5c725c3790e00dd
total files: 3
ignored (.dxtignore) files: 1
Output: /Users/ajohnson/fluree/rust/nexus-mcp-server/assets/assets.dxt
Then proceed to open & install the extension with Claude Desktop. When I enable the extension and look in the mcp-server-fluree-mcp-server.log file, I see...
2025-06-27T15:02:47.628Z [fluree-mcp-server] [info] Initializing server... { metadata: undefined }
2025-06-27T15:02:47.645Z [fluree-mcp-server] [error] spawn /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server EACCES {
metadata: {
context: 'connection',
stack: 'Error: spawn /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server EACCES\n' +
' at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n' +
' at onErrorNT (node:internal/child_process:483:16)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:90:21)'
}
}
2025-06-27T15:02:47.645Z [fluree-mcp-server] [error] spawn /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server EACCES {
metadata: {
stack: 'Error: spawn /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server EACCES\n' +
' at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n' +
' at onErrorNT (node:internal/child_process:483:16)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:90:21)'
}
}
2025-06-27T15:02:47.646Z [fluree-mcp-server] [info] Server transport closed { metadata: undefined }
2025-06-27T15:02:47.646Z [fluree-mcp-server] [info] Client transport closed { metadata: undefined }
2025-06-27T15:02:47.646Z [fluree-mcp-server] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log. { metadata: undefined }
2025-06-27T15:02:47.647Z [fluree-mcp-server] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) { metadata: { context: 'connection', stack: undefined } }
I can confirm we have lost execute permissions by running the following (notice below the -rw-r--r-- and 644 non-executable perms)
$ ls ~/Library/Application\ Support/Claude/Claude\ Extensions/local.dxt.fluree-pbc.fluree-mcp-server/
fluree_favicon.png manifest.json nexus-mcp-server
$ ls -la ~/Library/Application\ Support/Claude/Claude\ Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server
-rw-r--r--@ 1 ajohnson staff 13495120 Jun 27 11:02 /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server
$ stat -f "%A %N" ~/Library/Application\ Support/Claude/Claude\ Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server
644 /Users/ajohnson/Library/Application Support/Claude/Claude Extensions/local.dxt.fluree-pbc.fluree-mcp-server/nexus-mcp-server
The full manifest is as follows:
manifest.json
{
"dxt_version": "0.1",
"name": "fluree-mcp-server",
"version": "1.0.0",
"description": "An MCP Server for performing GraphRAG against Fluree datasets.",
"long_description": "This MCP Server allows you to perform GraphRAG operations against Fluree datasets. It connects to the Fluree database using the provided account credentials and datasets. For more information visit https://developers.flur.ee/docs/cloud/how-to/chat/intro/",
"author": {
"name": "Fluree, PBC",
"email": "support@flur.ee",
"url": "https://flur.ee"
},
"icon": "fluree_favicon.png",
"server": {
"type": "binary",
"entry_point": "nexus-mcp-server",
"mcp_config": {
"command": "${__dirname}/nexus-mcp-server",
"args": [
"--dataset",
"${user_config.dataset}",
"--fluree-api-key",
"${user_config.fluree_username}=${user_config.api_key}"
],
"env": {
"RUST_LOG": "debug",
"SERVER_PORT": "3456",
"MCP_TRANSPORT": "stdio"
}
}
},
"tools": [
{
"name": "get_data_model",
"description": "Get the data model for the current session's datasets."
},
{
"name": "sparql_query",
"description": "Execute a SPARQL query against the current session's datasets"
}
],
"user_config": {
"fluree_username": {
"type": "string",
"title": "Fluree Account Username",
"description": "e.g. ajohnson",
"required": true,
"sensitive": false
},
"api_key": {
"type": "string",
"title": "Fluree Account-Wide API Key",
"description": "e.g. ABCD...1234",
"required": true,
"sensitive": true
},
"dataset": {
"type": "string",
"title": "Fluree Datasets",
"description": "e.g. ajohnson/HardwareSupplyChain",
"long_description": "The dataset for this MCP server to access. This need to be available to your account (as a public dataset, or with you as the owner or collaborator).",
"required": true,
"sensitive": false
}
},
"compatibility": {
"claude_desktop": ">=0.10.0",
"platforms": ["darwin"]
},
"license": "MIT"
}
When using
dxt pack(from@anthropic-ai/dxtnpm package), and when using it specifically for a manifest configured for a binary, the dxt-packaged binary loses its execution permissions, such that when Claude Desktop goes to run the binary from its new.../Claude Extensions/...location, it encountersEACCESerrors. (Notice below the-rwxr-xr-xand755confirming execution perms)I can confirm we have lost execute permissions by running the following (notice below the
-rw-r--r--and644non-executable perms)The full manifest is as follows:
manifest.json{ "dxt_version": "0.1", "name": "fluree-mcp-server", "version": "1.0.0", "description": "An MCP Server for performing GraphRAG against Fluree datasets.", "long_description": "This MCP Server allows you to perform GraphRAG operations against Fluree datasets. It connects to the Fluree database using the provided account credentials and datasets. For more information visit https://developers.flur.ee/docs/cloud/how-to/chat/intro/", "author": { "name": "Fluree, PBC", "email": "support@flur.ee", "url": "https://flur.ee" }, "icon": "fluree_favicon.png", "server": { "type": "binary", "entry_point": "nexus-mcp-server", "mcp_config": { "command": "${__dirname}/nexus-mcp-server", "args": [ "--dataset", "${user_config.dataset}", "--fluree-api-key", "${user_config.fluree_username}=${user_config.api_key}" ], "env": { "RUST_LOG": "debug", "SERVER_PORT": "3456", "MCP_TRANSPORT": "stdio" } } }, "tools": [ { "name": "get_data_model", "description": "Get the data model for the current session's datasets." }, { "name": "sparql_query", "description": "Execute a SPARQL query against the current session's datasets" } ], "user_config": { "fluree_username": { "type": "string", "title": "Fluree Account Username", "description": "e.g. ajohnson", "required": true, "sensitive": false }, "api_key": { "type": "string", "title": "Fluree Account-Wide API Key", "description": "e.g. ABCD...1234", "required": true, "sensitive": true }, "dataset": { "type": "string", "title": "Fluree Datasets", "description": "e.g. ajohnson/HardwareSupplyChain", "long_description": "The dataset for this MCP server to access. This need to be available to your account (as a public dataset, or with you as the owner or collaborator).", "required": true, "sensitive": false } }, "compatibility": { "claude_desktop": ">=0.10.0", "platforms": ["darwin"] }, "license": "MIT" }