@weppy/roblox-mcp 0.1.10 → 1.0.0

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.
Files changed (44) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +52 -10
  3. package/README.md +6 -0
  4. package/docs/en/installation/ai-apps/gemini-cli.md +24 -31
  5. package/docs/en/installation/roblox-plugin.md +10 -5
  6. package/docs/en/pro-upgrade.md +36 -30
  7. package/docs/en/tools/overview.md +255 -95
  8. package/docs/es/README.md +6 -0
  9. package/docs/es/installation/README.md +6 -5
  10. package/docs/es/installation/ai-apps/gemini-cli.md +51 -58
  11. package/docs/es/installation/roblox-plugin.md +29 -24
  12. package/docs/es/pro-upgrade.md +39 -33
  13. package/docs/es/tools/overview.md +4 -0
  14. package/docs/id/README.md +6 -0
  15. package/docs/id/installation/ai-apps/gemini-cli.md +42 -49
  16. package/docs/id/installation/roblox-plugin.md +28 -23
  17. package/docs/id/pro-upgrade.md +36 -30
  18. package/docs/id/tools/overview.md +4 -0
  19. package/docs/ja/README.md +6 -0
  20. package/docs/ja/installation/README.md +5 -5
  21. package/docs/ja/installation/ai-apps/gemini-cli.md +39 -46
  22. package/docs/ja/installation/roblox-plugin.md +32 -27
  23. package/docs/ja/pro-upgrade.md +38 -32
  24. package/docs/ja/tools/overview.md +4 -0
  25. package/docs/ko/README.md +6 -0
  26. package/docs/ko/installation/ai-apps/gemini-cli.md +24 -31
  27. package/docs/ko/installation/roblox-plugin.md +10 -5
  28. package/docs/ko/pro-upgrade.md +36 -30
  29. package/docs/ko/tools/overview.md +255 -95
  30. package/docs/pt-br/README.md +6 -0
  31. package/docs/pt-br/installation/ai-apps/gemini-cli.md +47 -54
  32. package/docs/pt-br/installation/roblox-plugin.md +28 -23
  33. package/docs/pt-br/pro-upgrade.md +39 -33
  34. package/docs/pt-br/tools/overview.md +4 -0
  35. package/package.json +4 -2
  36. package/plugins/weppy-roblox-mcp/.claude-plugin/plugin.json +1 -1
  37. package/plugins/weppy-roblox-mcp/dist/index.js +70 -98
  38. package/plugins/weppy-roblox-mcp/skills/roblox-game-dev/SKILL.md +0 -155
  39. package/plugins/weppy-roblox-mcp/skills/roblox-game-dev/references/animations.json +0 -34
  40. package/plugins/weppy-roblox-mcp/skills/roblox-game-dev/references/mcp-tools.md +0 -220
  41. package/plugins/weppy-roblox-mcp/skills/roblox-sync/SKILL.md +0 -492
  42. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/post-verify.sh +0 -162
  43. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/pre-check.sh +0 -307
  44. package/plugins/weppy-roblox-mcp/skills/roblox-sync/scripts/update-metadata.sh +0 -27
@@ -1,307 +0,0 @@
1
- #!/bin/bash
2
- # =============================================================================
3
- # sync-and-verify.sh - Blocking sync verification script
4
- # =============================================================================
5
- # This script BLOCKS until all sync conditions are met. It does NOT exit early.
6
- # Used by roblox-sync skill to guarantee sync completion before returning.
7
- #
8
- # Exit codes:
9
- # 0 = Fully synced and verified
10
- # 10 = MCP server not running (after user chose to abort)
11
- # 11 = Studio/plugin not connected (after user chose to abort)
12
- # 12 = Sync data validation failed (after max retries)
13
- # 13 = User requested abort
14
- #
15
- # Usage: ./sync-and-verify.sh [--check-only] [--max-retries N]
16
- # =============================================================================
17
-
18
- set -euo pipefail
19
-
20
- # Configuration
21
- SYNC_DIR="${SYNC_DIR:-roblox-project-sync}"
22
- MCP_PORT="${MCP_PORT:-3002}"
23
- MAX_RETRIES="${MAX_RETRIES:-60}" # Max retries for each phase (5 minutes at 5s intervals)
24
- RETRY_INTERVAL=5
25
- CHECK_ONLY=false
26
-
27
- # Required services to verify in explorer/
28
- REQUIRED_SERVICES=("Workspace" "ReplicatedStorage" "ServerScriptService" "StarterPlayer")
29
-
30
- # Parse arguments
31
- while [[ $# -gt 0 ]]; do
32
- case $1 in
33
- --check-only) CHECK_ONLY=true; shift ;;
34
- --max-retries) MAX_RETRIES="$2"; shift 2 ;;
35
- *) shift ;;
36
- esac
37
- done
38
-
39
- # Colors for output
40
- RED='\033[0;31m'
41
- GREEN='\033[0;32m'
42
- YELLOW='\033[1;33m'
43
- BLUE='\033[0;34m'
44
- NC='\033[0m' # No Color
45
-
46
- # Logging functions
47
- log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
48
- log_success() { echo -e "${GREEN}[OK]${NC} $1"; }
49
- log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
50
- log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
51
- log_guide() { echo -e "${YELLOW}[GUIDE]${NC} $1"; }
52
-
53
- # Output machine-readable status
54
- output_status() {
55
- local status="$1"
56
- local message="$2"
57
- echo ""
58
- echo "=== SYNC STATUS ==="
59
- echo "STATUS=$status"
60
- echo "MESSAGE=$message"
61
- echo "TIMESTAMP=$(date -Iseconds)"
62
- echo "SYNC_DIR=$SYNC_DIR"
63
- if [ -f "$SYNC_DIR/rojo-detected.txt" ]; then
64
- echo "ROJO_MODE=$(cat "$SYNC_DIR/rojo-detected.txt")"
65
- else
66
- echo "ROJO_MODE=false"
67
- fi
68
- echo "==================="
69
- }
70
-
71
- # Create necessary directories
72
- setup_directories() {
73
- mkdir -p "$SYNC_DIR/explorer"
74
- mkdir -p "$SYNC_DIR/snapshots"
75
- mkdir -p "$SYNC_DIR/screenshots"
76
- }
77
-
78
- # Check if MCP server process is accessible
79
- check_mcp_available() {
80
- # Check if the MCP tool can respond (via ping or connection)
81
- # This verifies the Claude Code MCP connection is active
82
- if [ -f "$SYNC_DIR/connection-status.txt" ]; then
83
- local status=$(cat "$SYNC_DIR/connection-status.txt" 2>/dev/null | head -1)
84
- local file_age=$(( $(date +%s) - $(stat -f %m "$SYNC_DIR/connection-status.txt" 2>/dev/null || echo "0") ))
85
- if [ "$file_age" -lt 60 ] && [ "$status" = "connected" ]; then
86
- return 0
87
- fi
88
- fi
89
-
90
- # Check if Studio plugin port is responding
91
- if command -v nc &> /dev/null; then
92
- nc -z localhost "$MCP_PORT" 2>/dev/null && return 0
93
- fi
94
-
95
- return 1
96
- }
97
-
98
- # Phase 1: Wait for MCP/Studio connection
99
- wait_for_connection() {
100
- log_info "Phase 1: Checking MCP/Studio connection..."
101
-
102
- local retry_count=0
103
- local guided=false
104
-
105
- while ! check_mcp_available; do
106
- retry_count=$((retry_count + 1))
107
-
108
- if [ "$CHECK_ONLY" = true ]; then
109
- output_status "disconnected" "MCP/Studio not connected"
110
- exit 11
111
- fi
112
-
113
- if [ "$retry_count" -gt "$MAX_RETRIES" ]; then
114
- log_error "Connection timeout after $MAX_RETRIES attempts"
115
- output_status "timeout" "Connection timeout - MCP/Studio not responding"
116
- exit 11
117
- fi
118
-
119
- # Show guide only once
120
- if [ "$guided" = false ]; then
121
- guided=true
122
- echo ""
123
- log_warn "Roblox Studio/MCP not connected"
124
- log_guide "Please follow these steps:"
125
- echo " 1. Open Roblox Studio"
126
- echo " 2. Open your game place file"
127
- echo " 3. Go to Plugins tab"
128
- echo " 4. Click 'MCP Plugin' to enable"
129
- echo " 5. Verify plugin shows 'Connected' status"
130
- echo ""
131
- log_info "Waiting for connection... (retry $retry_count/$MAX_RETRIES)"
132
- else
133
- # Progress indicator
134
- echo -ne "\r Waiting for connection... (retry $retry_count/$MAX_RETRIES) "
135
- fi
136
-
137
- sleep "$RETRY_INTERVAL"
138
- done
139
-
140
- echo "" # Clear the line
141
- log_success "MCP/Studio connection established"
142
- echo "connected" > "$SYNC_DIR/connection-status.txt"
143
- return 0
144
- }
145
-
146
- # Phase 2: Verify sync data exists and is valid
147
- verify_sync_data() {
148
- log_info "Phase 2: Verifying sync data (folder structure)..."
149
-
150
- local explorer_dir="$SYNC_DIR/explorer"
151
- local missing_services=()
152
- local invalid_services=()
153
-
154
- # Check each required service has a folder with _index.json
155
- for service in "${REQUIRED_SERVICES[@]}"; do
156
- local service_dir="$explorer_dir/${service}"
157
- if [ ! -d "$service_dir" ]; then
158
- missing_services+=("$service")
159
- continue
160
- fi
161
-
162
- # Check for _tree.json (new format) or _index.json (legacy)
163
- local index_file="$service_dir/_tree.json"
164
- if [ ! -f "$index_file" ]; then
165
- index_file="$service_dir/_index.json"
166
- fi
167
- if [ ! -f "$index_file" ]; then
168
- invalid_services+=("$service (missing _tree.json)")
169
- continue
170
- fi
171
-
172
- # Check file is not empty and has valid structure
173
- local file_size
174
- file_size=$(stat -f %z "$index_file" 2>/dev/null || stat -c %s "$index_file" 2>/dev/null || echo "0")
175
- if [ "$file_size" -lt 20 ]; then
176
- invalid_services+=("$service (empty _index.json)")
177
- continue
178
- fi
179
-
180
- # Basic JSON validation - check for expected fields
181
- if ! grep -q '"name"' "$index_file" 2>/dev/null; then
182
- invalid_services+=("$service (invalid _index.json)")
183
- continue
184
- fi
185
- done
186
-
187
- # Report results
188
- if [ ${#missing_services[@]} -gt 0 ] || [ ${#invalid_services[@]} -gt 0 ]; then
189
- if [ ${#missing_services[@]} -gt 0 ]; then
190
- log_warn "Missing services: ${missing_services[*]}"
191
- fi
192
- if [ ${#invalid_services[@]} -gt 0 ]; then
193
- log_warn "Invalid services: ${invalid_services[*]}"
194
- fi
195
- return 1
196
- fi
197
-
198
- log_success "All required services verified: ${REQUIRED_SERVICES[*]}"
199
- return 0
200
- }
201
-
202
- # Check last-sync.txt for freshness
203
- check_sync_freshness() {
204
- local last_sync_file="$SYNC_DIR/last-sync.txt"
205
-
206
- if [ ! -f "$last_sync_file" ]; then
207
- return 1
208
- fi
209
-
210
- local last_sync=$(cat "$last_sync_file")
211
-
212
- # Use gdate on macOS if available
213
- local date_cmd="date"
214
- if command -v gdate &> /dev/null; then
215
- date_cmd="gdate"
216
- fi
217
-
218
- local last_epoch=$($date_cmd -d "$last_sync" +%s 2>/dev/null || echo "0")
219
- local now_epoch=$($date_cmd +%s)
220
- local diff_minutes=$(( (now_epoch - last_epoch) / 60 ))
221
-
222
- if [ "$diff_minutes" -gt 30 ]; then
223
- log_warn "Sync data is stale (${diff_minutes}m old)"
224
- return 1
225
- fi
226
-
227
- return 0
228
- }
229
-
230
- # Full sync verification check
231
- full_verification() {
232
- local issues=()
233
-
234
- # Check connection
235
- if ! check_mcp_available; then
236
- issues+=("MCP/Studio not connected")
237
- fi
238
-
239
- # Check sync data
240
- if ! verify_sync_data; then
241
- issues+=("Sync data incomplete or invalid")
242
- fi
243
-
244
- # Check freshness
245
- if ! check_sync_freshness; then
246
- issues+=("Sync data is stale or missing timestamp")
247
- fi
248
-
249
- if [ ${#issues[@]} -gt 0 ]; then
250
- for issue in "${issues[@]}"; do
251
- log_warn "$issue"
252
- done
253
- return 1
254
- fi
255
-
256
- return 0
257
- }
258
-
259
- # Main execution
260
- main() {
261
- echo "=============================================="
262
- echo " Roblox Studio Sync Verification"
263
- echo "=============================================="
264
- echo ""
265
-
266
- # Setup directories
267
- setup_directories
268
-
269
- # Detect Rojo
270
- if [ -f "default.project.json" ]; then
271
- echo "true" > "$SYNC_DIR/rojo-detected.txt"
272
- log_info "Rojo project detected"
273
- else
274
- echo "false" > "$SYNC_DIR/rojo-detected.txt"
275
- fi
276
-
277
- # If check-only mode, just verify current state
278
- if [ "$CHECK_ONLY" = true ]; then
279
- if full_verification; then
280
- output_status "synced" "All checks passed"
281
- exit 0
282
- else
283
- output_status "needs_sync" "Sync verification failed"
284
- exit 12
285
- fi
286
- fi
287
-
288
- # Phase 1: Wait for connection (blocks until connected)
289
- wait_for_connection
290
-
291
- # Phase 2: Check if data needs to be synced
292
- if verify_sync_data && check_sync_freshness; then
293
- log_success "Existing sync data is valid and fresh"
294
- output_status "synced" "Existing sync data verified"
295
- exit 0
296
- fi
297
-
298
- # Data needs to be synced - signal this to the agent
299
- log_info "Sync data needs refresh"
300
- output_status "needs_sync" "Connection OK, but sync data needs refresh via MCP tools"
301
-
302
- # Return special code to indicate sync is needed
303
- # The agent will then call MCP tools to perform the actual sync
304
- exit 100 # Special code: connection OK, but sync data needs refresh
305
- }
306
-
307
- main "$@"
@@ -1,27 +0,0 @@
1
- #!/bin/bash
2
- # =============================================================================
3
- # update-metadata.sh - Update sync metadata after successful sync
4
- # =============================================================================
5
- # Updates last-sync timestamp and connection status.
6
- # Run this after MCP data has been written to explorer/.
7
- #
8
- # Exit codes:
9
- # 0 = Metadata updated
10
- # 1 = Failed (sync directory not found)
11
- # =============================================================================
12
-
13
- set -euo pipefail
14
-
15
- SYNC_DIR="${1:-roblox-project-sync}"
16
-
17
- if [ ! -d "$SYNC_DIR" ]; then
18
- echo "ERROR: Sync directory not found: $SYNC_DIR"
19
- exit 1
20
- fi
21
-
22
- date -Iseconds > "$SYNC_DIR/last-sync.txt"
23
- echo "connected" > "$SYNC_DIR/connection-status.txt"
24
-
25
- echo "METADATA=updated"
26
- echo "TIMESTAMP=$(cat "$SYNC_DIR/last-sync.txt")"
27
- echo "CONNECTION=connected"