acuity-mcp-server 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/acuity-mcp.cjs +38 -0
- package/bin/acuity-mcp.cmd +109 -0
- package/bin/acuity-mcp.sh +156 -0
- package/package.json +3 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Cross-platform launcher for Acuity MCP Server
|
|
4
|
+
// Uses only CommonJS syntax compatible with Node 10+
|
|
5
|
+
// No npm dependencies - just spawns the platform-specific script
|
|
6
|
+
|
|
7
|
+
var spawn = require('child_process').spawn;
|
|
8
|
+
var path = require('path');
|
|
9
|
+
var os = require('os');
|
|
10
|
+
var fs = require('fs');
|
|
11
|
+
|
|
12
|
+
var scriptDir = __dirname;
|
|
13
|
+
var isWindows = os.platform() === 'win32';
|
|
14
|
+
|
|
15
|
+
var script = isWindows
|
|
16
|
+
? path.join(scriptDir, 'acuity-mcp.cmd')
|
|
17
|
+
: path.join(scriptDir, 'acuity-mcp.sh');
|
|
18
|
+
|
|
19
|
+
// Check if script exists
|
|
20
|
+
if (!fs.existsSync(script)) {
|
|
21
|
+
console.error('Error: Could not find launcher script:', script);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Spawn the platform-specific script
|
|
26
|
+
var child = spawn(script, process.argv.slice(2), {
|
|
27
|
+
stdio: 'inherit',
|
|
28
|
+
shell: isWindows
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
child.on('error', function(err) {
|
|
32
|
+
console.error('Error starting Acuity MCP Server:', err.message);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
child.on('exit', function(code) {
|
|
37
|
+
process.exit(code || 0);
|
|
38
|
+
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal enabledelayedexpansion
|
|
3
|
+
|
|
4
|
+
:: Acuity MCP Server - Auto Node Finder for Windows
|
|
5
|
+
:: Automatically finds Node.js 20+ and runs the MCP server
|
|
6
|
+
|
|
7
|
+
set "SCRIPT_DIR=%~dp0"
|
|
8
|
+
set "SERVER_JS=%SCRIPT_DIR%..\dist\main.js"
|
|
9
|
+
set "MIN_NODE_VERSION=20"
|
|
10
|
+
set "NODE_BIN="
|
|
11
|
+
|
|
12
|
+
:: Check nvm-windows
|
|
13
|
+
if exist "%USERPROFILE%\.nvm" (
|
|
14
|
+
for /d %%d in ("%USERPROFILE%\.nvm\v2*") do (
|
|
15
|
+
if exist "%%d\node.exe" (
|
|
16
|
+
call :check_version "%%d\node.exe"
|
|
17
|
+
if defined NODE_BIN goto :run_server
|
|
18
|
+
)
|
|
19
|
+
)
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
:: Check fnm
|
|
23
|
+
if exist "%USERPROFILE%\.fnm\node-versions" (
|
|
24
|
+
for /d %%d in ("%USERPROFILE%\.fnm\node-versions\v2*") do (
|
|
25
|
+
if exist "%%d\installation\node.exe" (
|
|
26
|
+
call :check_version "%%d\installation\node.exe"
|
|
27
|
+
if defined NODE_BIN goto :run_server
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
:: Check volta
|
|
33
|
+
if exist "%USERPROFILE%\.volta\bin\node.exe" (
|
|
34
|
+
call :check_version "%USERPROFILE%\.volta\bin\node.exe"
|
|
35
|
+
if defined NODE_BIN goto :run_server
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
:: Check Program Files
|
|
39
|
+
if exist "C:\Program Files\nodejs\node.exe" (
|
|
40
|
+
call :check_version "C:\Program Files\nodejs\node.exe"
|
|
41
|
+
if defined NODE_BIN goto :run_server
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
:: Check PATH
|
|
45
|
+
where node >nul 2>&1
|
|
46
|
+
if %errorlevel% equ 0 (
|
|
47
|
+
for /f "tokens=*" %%i in ('where node') do (
|
|
48
|
+
call :check_version "%%i"
|
|
49
|
+
if defined NODE_BIN goto :run_server
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
:: No suitable Node found
|
|
54
|
+
goto :show_error
|
|
55
|
+
|
|
56
|
+
:check_version
|
|
57
|
+
set "test_node=%~1"
|
|
58
|
+
for /f "tokens=1 delims=v." %%v in ('"%test_node%" -v 2^>nul') do (
|
|
59
|
+
set "ver=%%v"
|
|
60
|
+
)
|
|
61
|
+
:: Remove 'v' prefix if present
|
|
62
|
+
set "ver=%ver:v=%"
|
|
63
|
+
if defined ver (
|
|
64
|
+
if %ver% geq %MIN_NODE_VERSION% (
|
|
65
|
+
set "NODE_BIN=%test_node%"
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
goto :eof
|
|
69
|
+
|
|
70
|
+
:run_server
|
|
71
|
+
"%NODE_BIN%" "%SERVER_JS%" %*
|
|
72
|
+
goto :end
|
|
73
|
+
|
|
74
|
+
:show_error
|
|
75
|
+
echo.
|
|
76
|
+
echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
77
|
+
echo ERROR: Node.js 20 or higher is required to run Acuity MCP Server
|
|
78
|
+
echo ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
79
|
+
echo.
|
|
80
|
+
echo Required: ^>= 20.0.0
|
|
81
|
+
echo.
|
|
82
|
+
echo ━━━ How to install Node.js 20+ ━━━
|
|
83
|
+
echo.
|
|
84
|
+
echo Option 1 - winget:
|
|
85
|
+
echo ^> winget install OpenJS.NodeJS.LTS
|
|
86
|
+
echo.
|
|
87
|
+
echo Option 2 - Official installer:
|
|
88
|
+
echo https://nodejs.org/en/download/
|
|
89
|
+
echo.
|
|
90
|
+
echo ━━━ Already have Node 20+ installed? ━━━
|
|
91
|
+
echo.
|
|
92
|
+
echo The script searched these locations:
|
|
93
|
+
echo * %%USERPROFILE%%\.nvm\
|
|
94
|
+
echo * %%USERPROFILE%%\.fnm\node-versions\
|
|
95
|
+
echo * %%USERPROFILE%%\.volta\bin\
|
|
96
|
+
echo * C:\Program Files\nodejs\
|
|
97
|
+
echo * PATH environment variable
|
|
98
|
+
echo.
|
|
99
|
+
echo If Node 20+ is installed elsewhere, add PATH to Claude Desktop config:
|
|
100
|
+
echo %%APPDATA%%\Claude\claude_desktop_config.json
|
|
101
|
+
echo.
|
|
102
|
+
echo "env": {
|
|
103
|
+
echo "PATH": "C:\path\to\node;%%PATH%%"
|
|
104
|
+
echo }
|
|
105
|
+
echo.
|
|
106
|
+
exit /b 1
|
|
107
|
+
|
|
108
|
+
:end
|
|
109
|
+
endlocal
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Acuity MCP Server - Auto Node Finder
|
|
4
|
+
# Automatically finds Node.js 20+ and runs the MCP server
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
7
|
+
SERVER_JS="$SCRIPT_DIR/../dist/main.js"
|
|
8
|
+
MIN_NODE_VERSION=20
|
|
9
|
+
|
|
10
|
+
# Colors for output
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
YELLOW='\033[0;33m'
|
|
14
|
+
CYAN='\033[0;36m'
|
|
15
|
+
NC='\033[0m' # No Color
|
|
16
|
+
|
|
17
|
+
# Check if a node binary is version 20+
|
|
18
|
+
check_node_version() {
|
|
19
|
+
local node_bin="$1"
|
|
20
|
+
if [ -x "$node_bin" ]; then
|
|
21
|
+
local version=$("$node_bin" -v 2>/dev/null | sed 's/v//' | cut -d. -f1)
|
|
22
|
+
if [ -n "$version" ] && [ "$version" -ge "$MIN_NODE_VERSION" ]; then
|
|
23
|
+
echo "$node_bin"
|
|
24
|
+
return 0
|
|
25
|
+
fi
|
|
26
|
+
fi
|
|
27
|
+
return 1
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# Find Node.js 20+ in various locations
|
|
31
|
+
find_node() {
|
|
32
|
+
# 1. Check nvm versions (most common for developers)
|
|
33
|
+
if [ -d "$HOME/.nvm/versions/node" ]; then
|
|
34
|
+
for dir in $(ls -d "$HOME/.nvm/versions/node"/v[2-9][0-9]* 2>/dev/null | sort -rV); do
|
|
35
|
+
local node_bin="$dir/bin/node"
|
|
36
|
+
if result=$(check_node_version "$node_bin"); then
|
|
37
|
+
echo "$result"
|
|
38
|
+
return 0
|
|
39
|
+
fi
|
|
40
|
+
done
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
# 2. Check fnm versions (fast node manager)
|
|
44
|
+
if [ -d "$HOME/.fnm/node-versions" ]; then
|
|
45
|
+
for dir in $(ls -d "$HOME/.fnm/node-versions"/v[2-9][0-9]* 2>/dev/null | sort -rV); do
|
|
46
|
+
local node_bin="$dir/installation/bin/node"
|
|
47
|
+
if result=$(check_node_version "$node_bin"); then
|
|
48
|
+
echo "$result"
|
|
49
|
+
return 0
|
|
50
|
+
fi
|
|
51
|
+
done
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# 3. Check volta
|
|
55
|
+
if [ -d "$HOME/.volta/bin" ]; then
|
|
56
|
+
local node_bin="$HOME/.volta/bin/node"
|
|
57
|
+
if result=$(check_node_version "$node_bin"); then
|
|
58
|
+
echo "$result"
|
|
59
|
+
return 0
|
|
60
|
+
fi
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# 4. Check homebrew (macOS)
|
|
64
|
+
for node_bin in "/opt/homebrew/bin/node" "/usr/local/bin/node"; do
|
|
65
|
+
if result=$(check_node_version "$node_bin"); then
|
|
66
|
+
echo "$result"
|
|
67
|
+
return 0
|
|
68
|
+
fi
|
|
69
|
+
done
|
|
70
|
+
|
|
71
|
+
# 5. Check common Linux locations
|
|
72
|
+
for node_bin in "/usr/bin/node" "/usr/local/bin/node"; do
|
|
73
|
+
if result=$(check_node_version "$node_bin"); then
|
|
74
|
+
echo "$result"
|
|
75
|
+
return 0
|
|
76
|
+
fi
|
|
77
|
+
done
|
|
78
|
+
|
|
79
|
+
# 6. Check PATH as last resort
|
|
80
|
+
if command -v node &>/dev/null; then
|
|
81
|
+
local node_bin=$(command -v node)
|
|
82
|
+
if result=$(check_node_version "$node_bin"); then
|
|
83
|
+
echo "$result"
|
|
84
|
+
return 0
|
|
85
|
+
fi
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
return 1
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
# Show error message with install instructions
|
|
92
|
+
show_error() {
|
|
93
|
+
local current_version="$1"
|
|
94
|
+
|
|
95
|
+
echo -e "\n${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
96
|
+
echo -e "${RED}❌ ERROR: Node.js 20 or higher is required to run Acuity MCP Server${NC}"
|
|
97
|
+
echo -e "${RED}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
|
|
98
|
+
|
|
99
|
+
if [ -n "$current_version" ]; then
|
|
100
|
+
echo -e " Found Node.js: ${YELLOW}$current_version${NC} (too old)"
|
|
101
|
+
else
|
|
102
|
+
echo -e " ${YELLOW}No Node.js found${NC}"
|
|
103
|
+
fi
|
|
104
|
+
echo -e " Required: ${GREEN}>= 20.0.0${NC}\n"
|
|
105
|
+
|
|
106
|
+
echo -e "${CYAN}━━━ How to install Node.js 20+ ━━━${NC}\n"
|
|
107
|
+
|
|
108
|
+
# Detect OS
|
|
109
|
+
case "$(uname -s)" in
|
|
110
|
+
Darwin)
|
|
111
|
+
echo -e "${YELLOW}📦 macOS:${NC}\n"
|
|
112
|
+
echo " Option 1 - Homebrew (recommended):"
|
|
113
|
+
echo -e " ${GREEN}$ brew install node@22${NC}\n"
|
|
114
|
+
echo " Option 2 - Official installer:"
|
|
115
|
+
echo -e " \033[4mhttps://nodejs.org/en/download/\033[0m\n"
|
|
116
|
+
;;
|
|
117
|
+
Linux)
|
|
118
|
+
echo -e "${YELLOW}📦 Linux:${NC}\n"
|
|
119
|
+
echo " Option 1 - NodeSource (recommended):"
|
|
120
|
+
echo -e " ${GREEN}$ curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -${NC}"
|
|
121
|
+
echo -e " ${GREEN}$ sudo apt-get install -y nodejs${NC}\n"
|
|
122
|
+
echo " Option 2 - Official binaries:"
|
|
123
|
+
echo -e " \033[4mhttps://nodejs.org/en/download/\033[0m\n"
|
|
124
|
+
;;
|
|
125
|
+
esac
|
|
126
|
+
|
|
127
|
+
echo -e "${CYAN}━━━ Already have Node 20+ installed? ━━━${NC}\n"
|
|
128
|
+
echo " The script searched these locations:"
|
|
129
|
+
echo " • ~/.nvm/versions/node/"
|
|
130
|
+
echo " • ~/.fnm/node-versions/"
|
|
131
|
+
echo " • ~/.volta/bin/"
|
|
132
|
+
echo " • /opt/homebrew/bin/"
|
|
133
|
+
echo " • /usr/local/bin/"
|
|
134
|
+
echo " • /usr/bin/"
|
|
135
|
+
echo ""
|
|
136
|
+
echo " If Node 20+ is installed elsewhere, add PATH to Claude Desktop config:"
|
|
137
|
+
echo -e " ${YELLOW}~/Library/Application Support/Claude/claude_desktop_config.json${NC}\n"
|
|
138
|
+
echo -e " ${GREEN}\"env\": {"
|
|
139
|
+
echo " \"PATH\": \"/path/to/node/bin:/usr/bin:/bin\""
|
|
140
|
+
echo -e " }${NC}\n"
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# Main
|
|
144
|
+
NODE_BIN=$(find_node)
|
|
145
|
+
|
|
146
|
+
if [ -z "$NODE_BIN" ]; then
|
|
147
|
+
# Try to get current node version for error message
|
|
148
|
+
if command -v node &>/dev/null; then
|
|
149
|
+
current=$(node -v 2>/dev/null)
|
|
150
|
+
fi
|
|
151
|
+
show_error "$current"
|
|
152
|
+
exit 1
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
# Run the server with found Node
|
|
156
|
+
exec "$NODE_BIN" "$SERVER_JS" "$@"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "acuity-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "MCP server for Acuity Project Management - enables LLM access to project data",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20"
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"bin": {
|
|
11
|
-
"acuity-mcp-server": "./
|
|
11
|
+
"acuity-mcp-server": "./bin/acuity-mcp.cjs"
|
|
12
12
|
},
|
|
13
13
|
"files": [
|
|
14
|
+
"bin",
|
|
14
15
|
"dist",
|
|
15
16
|
"!dist/**/__tests__",
|
|
16
17
|
"openapi.yaml",
|