Skip to content

Packaged .dxt binary file loses executable permission (throws EACCES error) #13

Description

@aaj3f

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"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions