lokalise-debug-bundle
Collect Lokalise debug evidence for support tickets and troubleshooting. Use when encountering persistent issues, preparing support tickets, or collecting diagnostic information for Lokalise problems. Trigger with phrases like "lokalise debug", "lokalise support bundle", "collect lokalise logs", "lokalise diagnostic".
Install
mkdir -p .claude/skills/lokalise-debug-bundle && curl -L -o skill.zip "https://mcp.directory/api/skills/download/8419" && unzip -o skill.zip -d .claude/skills/lokalise-debug-bundle && rm skill.zipInstalls to .claude/skills/lokalise-debug-bundle
About this skill
Lokalise Debug Bundle
Current State
!node --version 2>/dev/null || echo 'N/A'
!python3 --version 2>/dev/null || echo 'N/A'
!uname -a
Overview
Collect all diagnostic information needed to troubleshoot Lokalise integration issues or file a support ticket — environment versions, SDK/CLI status, API connectivity, project listings with key counts, upload process status, and redacted logs, bundled into a timestamped .tar.gz archive.
Prerequisites
LOKALISE_API_TOKENenvironment variable set (or token available to provide)curlandjqavailable on PATH- Optional:
@lokalise/node-apiSDK installed in current project - Optional:
lokalise2CLI installed
Instructions
Step 1: Create the Bundle Directory
set -euo pipefail
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BUNDLE_DIR="lokalise-debug-${TIMESTAMP}"
mkdir -p "${BUNDLE_DIR}"
echo "Bundle directory: ${BUNDLE_DIR}"
Step 2: Collect Environment Information
set -euo pipefail
cat > "${BUNDLE_DIR}/environment.txt" <<ENVEOF
=== System ===
OS: $(uname -srm)
Shell: ${SHELL:-unknown}
Date: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
=== Runtime Versions ===
Node.js: $(node --version 2>/dev/null || echo 'not installed')
npm: $(npm --version 2>/dev/null || echo 'not installed')
Python: $(python3 --version 2>/dev/null || echo 'not installed')
=== Lokalise SDK ===
$(npm list @lokalise/node-api 2>/dev/null || echo 'SDK not found in project')
=== Lokalise CLI ===
$(lokalise2 --version 2>/dev/null || echo 'CLI not installed')
=== Token Status ===
LOKALISE_API_TOKEN: $([ -n "${LOKALISE_API_TOKEN:-}" ] && echo "SET (${#LOKALISE_API_TOKEN} chars)" || echo "NOT SET")
ENVEOF
echo "Environment info collected."
Step 3: Test API Connectivity
set -euo pipefail
echo "=== API Connectivity Test ===" > "${BUNDLE_DIR}/api-connectivity.txt"
# Test DNS resolution
echo -e "\n--- DNS Resolution ---" >> "${BUNDLE_DIR}/api-connectivity.txt"
nslookup api.lokalise.com 2>&1 | tail -4 >> "${BUNDLE_DIR}/api-connectivity.txt" || echo "nslookup failed" >> "${BUNDLE_DIR}/api-connectivity.txt"
# Test HTTPS connectivity and response time
echo -e "\n--- HTTPS Connectivity ---" >> "${BUNDLE_DIR}/api-connectivity.txt"
curl -s -o /dev/null -w "HTTP Status: %{http_code}\nConnect Time: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal Time: %{time_total}s\nRemote IP: %{remote_ip}\n" \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}" \
"https://api.lokalise.com/api2/system/languages?limit=1" \
>> "${BUNDLE_DIR}/api-connectivity.txt" 2>&1
# Check rate limit headers
echo -e "\n--- Rate Limit Headers ---" >> "${BUNDLE_DIR}/api-connectivity.txt"
curl -s -D - -o /dev/null \
-H "X-Api-Token: ${LOKALISE_API_TOKEN}" \
"https://api.lokalise.com/api2/system/languages?limit=1" 2>/dev/null \
| grep -iE '(x-ratelimit|retry-after)' >> "${BUNDLE_DIR}/api-connectivity.txt" || echo "No rate limit headers found" >> "${BUNDLE_DIR}/api-connectivity.txt"
echo "API connectivity tested."
Step 4: List Projects and Key Counts
set -euo pipefail
echo "Fetching project list..."
curl -s -H "X-Api-Token: ${LOKALISE_API_TOKEN}" \
"https://api.lokalise.com/api2/projects?limit=100&include_statistics=1" \
| jq '[.projects[] | {
project_id: .project_id,
name: .name,
base_language: .base_language_iso,
keys: .statistics.keys_total,
languages: (.statistics.languages // [] | length),
progress: .statistics.progress_total,
created: .created_at
}]' > "${BUNDLE_DIR}/projects.json" 2>/dev/null || echo '{"error": "Failed to fetch projects"}' > "${BUNDLE_DIR}/projects.json"
# Summary line
PROJ_COUNT=$(jq 'length' "${BUNDLE_DIR}/projects.json" 2>/dev/null || echo "0")
TOTAL_KEYS=$(jq '[.[].keys // 0] | add // 0' "${BUNDLE_DIR}/projects.json" 2>/dev/null || echo "0")
echo "Found ${PROJ_COUNT} projects with ${TOTAL_KEYS} total keys."
Step 5: Check File Upload Process Status
set -euo pipefail
# Check queued processes for each project (file uploads are async)
echo "[]" > "${BUNDLE_DIR}/processes.json"
for PID in $(jq -r '.[].project_id' "${BUNDLE_DIR}/projects.json" 2>/dev/null); do
curl -s -H "X-Api-Token: ${LOKALISE_API_TOKEN}" \
"https://api.lokalise.com/api2/projects/${PID}/processes?limit=10" \
| jq --arg pid "$PID" '[.processes[]? | {project_id: $pid, type: .type, status: .status, created_at: .created_at, message: .message}]' \
>> "${BUNDLE_DIR}/processes-raw.json" 2>/dev/null || true
sleep 0.17 # Respect 6 req/s rate limit
done
# Merge all process entries
jq -s 'flatten' "${BUNDLE_DIR}/processes-raw.json" > "${BUNDLE_DIR}/processes.json" 2>/dev/null || true
rm -f "${BUNDLE_DIR}/processes-raw.json"
PROC_COUNT=$(jq 'length' "${BUNDLE_DIR}/processes.json" 2>/dev/null || echo "0")
echo "Found ${PROC_COUNT} recent upload processes."
Step 6: Collect and Redact Application Logs
set -euo pipefail
# Gather any lokalise-related log lines from common locations
{
echo "=== npm debug log (if exists) ==="
cat ~/.npm/_logs/*-debug.log 2>/dev/null | grep -i lokalise | tail -50 || echo "No npm debug logs"
echo -e "\n=== Application stderr/stdout (recent) ==="
grep -ri "lokalise" /tmp/*.log 2>/dev/null | tail -30 || echo "No /tmp logs found"
} > "${BUNDLE_DIR}/logs-raw.txt" 2>/dev/null || true
# Redact sensitive values
sed -E \
-e 's/([0-9a-f]{32,})/[REDACTED_TOKEN]/gi' \
-e 's/(X-Api-Token:\s*)[^ ]*/\1[REDACTED]/gi' \
-e 's/(apiKey:\s*["'"'"']?)[^"'"'"',]+/\1[REDACTED]/gi' \
-e 's/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/[REDACTED_EMAIL]/g' \
"${BUNDLE_DIR}/logs-raw.txt" > "${BUNDLE_DIR}/logs-redacted.txt" 2>/dev/null || true
rm -f "${BUNDLE_DIR}/logs-raw.txt"
echo "Logs collected and redacted."
Step 7: Create the tar.gz Bundle
set -euo pipefail
tar -czf "${BUNDLE_DIR}.tar.gz" "${BUNDLE_DIR}/"
SIZE=$(du -h "${BUNDLE_DIR}.tar.gz" | cut -f1)
echo "Bundle created: ${BUNDLE_DIR}.tar.gz (${SIZE})"
echo "Contents:"
tar -tzf "${BUNDLE_DIR}.tar.gz"
Output
lokalise-debug-YYYYMMDD-HHMMSS.tar.gzarchive containing:environment.txt— Node.js, SDK, CLI versions, token statusapi-connectivity.txt— DNS, HTTPS latency, rate limit headersprojects.json— Project list with key/language counts and progressprocesses.json— Recent file upload process statuses per projectlogs-redacted.txt— Relevant logs with tokens and emails scrubbed
Error Handling
| Issue | Cause | Solution |
|---|---|---|
401 Unauthorized | Token invalid or expired | Regenerate token in Lokalise > User Profile > API Tokens |
403 Forbidden | Token lacks read scope | Use a read-write token or admin token |
429 Too Many Requests | Rate limit exceeded during project scan | Script includes sleep 0.17 between calls; reduce --limit if still hitting |
Empty projects.json | Token has no project access | Verify the token owner is a contributor on at least one project |
nslookup fails | DNS resolution blocked | Try dig api.lokalise.com or check /etc/resolv.conf |
tar permission denied | Bundle dir in read-only location | Run from a writable directory like ~/tmp |
Examples
Quick One-Liner API Health Check
set -euo pipefail
curl -s -w "\nHTTP %{http_code} in %{time_total}s\n" \
-H "X-Api-Token: $LOKALISE_API_TOKEN" \
"https://api.lokalise.com/api2/projects?limit=1" | jq '{project: .projects[0].name, keys: .projects[0].statistics.keys_total}'
Check SDK Version Programmatically
set -euo pipefail
node -e "const pkg = require('@lokalise/node-api/package.json'); console.log('SDK:', pkg.version, '| Node:', process.version)"
Redaction Safety Checklist
Always redacted: API tokens, webhook secrets, OAuth credentials, email addresses, any 32+ character hex strings.
Safe to include: Error messages, stack traces (after redaction pass), SDK and runtime versions, project IDs, HTTP status codes, rate limit header values.
Resources
- Lokalise API Reference
- Lokalise Status Page
- Lokalise Support
- Community Forum
- Rate Limits Documentation
Next Steps
- For rate limit issues found in the bundle, see
lokalise-performance-tuning. - For SDK version mismatches, see
lokalise-upgrade-migration. - Attach the
.tar.gzbundle directly to a Lokalise support ticket at support@lokalise.com.
More by jeremylongshore
View all skills by jeremylongshore →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversControl any ROS1 or ROS2 robot with natural language using ROS MCP Server—AI-powered, code-free, real-time monitoring an
Connect MongoDB databases to chat interfaces. Manage AWS with MongoDB, explore Atlas cost, and inspect collections secur
Easily integrate and debug Sentry APIs with sentry-mcp, a flexible MCP middleware for cloud and self-hosted setups.
Empower AI agents for efficient API automation in Postman for API testing. Streamline workflows and boost productivity w
Unlock AI-powered automation for Postman for API testing. Streamline workflows, code sync, and team collaboration with f
Integrate DuckDuckGo web search into your site with our MCP server, supporting features like Google custom search and ro
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.