pingLABSCO SUMMARY
Turns a night's worth of log noise into filed tickets, with the model running where the logs already are.
analyze_log_file does the whole chain in one call — filter, deduplicate, analyse, write, file — and hands back a job id, because the model work takes minutes rather than seconds. Run it in preview mode first: it shows you the issues it would open before your repository gets them.
What it is
A server that reads a log file on your disk, filters it down to its errors, groups the repeats, has a locally-run model write up each distinct failure, and files those write-ups as issues in a repository you nominate.
What you get
- A large log file cut down to its error lines before any model sees it
- Repeated events fingerprinted and deduplicated, so one recurring failure becomes one issue rather than hundreds
- Analysis against a model running on your own machine — raw log content stays on it
- Issues written with a root cause and a suggested fix, filed into your repository, with ones that already exist skipped
- A preview mode that composes the issues and shows them to you without filing anything
- Long runs handled as background jobs: the call returns a job id straight away and you poll it
- Classification rules kept as plain-English files you can edit, so the analysis learns your own stack's error patterns
Requirements
A GitHub personal access token with repository scope for the account whose repo receives the issues, a local model runtime with the model already pulled, and ripgrep. It documents macOS on Apple Silicon and wants a machine with plenty of memory, since the model runs beside your work. Setup is clone-and-build: make a Python virtual environment, install the dependencies, then point your client at the server script.
Setup effort
Follow the published steps — brew install ollama ripgrep
USE CASES
Turning last night's error log into tickets
Point it at the log file and it filters, groups and files an issue for each distinct failure, skipping the ones already open in the repo.
Seeing what it would file before it files it
Run the same analysis with the preview switch on and read the composed issues, then run it again for real.
Checking on a run that takes minutes
Poll the job for how many lines survived filtering, how many distinct events came out, and which issues went in.
Working out why nothing came back
A health check confirms the server is up and the local model is answering, before you go looking at the log file.
Teaching it your stack's error vocabulary
Write a plain-English rules file that says which strings are critical, which are worth a ticket, and which are known noise, then load it alongside the built-in ones.
3 tools
Listed in project docs. Your client may show a different list.
analyze_log_fileget_job_statusBEFORE YOU INSTALL
What to know first
Tools you get
3 tools named in the project's documentation. The skills are markdown files, not tools, and dry_run is a parameter of analyze_log_file. v1 runs over stdio only, which Claude Desktop, Claude Code and Cursor all use; the HTTP+SSE transport the README lists for LangChain and n8n is planned for v2.
Requires
GITHUB_PAT in your environment
Where it runs
All 3 documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
brew install ollama ripgrep
brew services start ollama
ollama pull deepseek-r1:14b
git clone https://github.com/mashish/nft-log-analyzer.git && cd nft-log-analyzer
/opt/homebrew/bin/python3.11 -m venv .venv && source .venv/bin/activate
pip install mcp "crewai>=0.80.0" crewai-tools langchain-ollama litellm fastapi uvicorn httpx httpx-sse structlog loguru pydantic python-dotenv tenacity rich typer
cp .env.example .envOpen .env and set GITHUB_PAT, GITHUB_REPO_OWNER and GITHUB_REPO_NAME
Add the Claude Desktop block to ~/Library/Application Support/Claude/claude_desktop_config.json and restart Claude Desktop
MCP Clients
Claude Desktop, Claude Code, Cursor
{
"mcpServers": {
"mcp-log-analyzer": {
"command": "<YOUR_PATH_TO_MCP_LOG_ANALYZER>/.venv/bin/python",
"args": [
"<YOUR_PATH_TO_MCP_LOG_ANALYZER>/mcp_server/server.py"
],
"env": {
"GITHUB_PAT": "<YOUR_GITHUB_PAT>",
"GITHUB_REPO_OWNER": "<YOUR_GITHUB_REPO_OWNER>",
"GITHUB_REPO_NAME": "<YOUR_GITHUB_REPO_NAME>",
"OLLAMA_BASE_URL": "http://localhost:11434",
"OLLAMA_MODEL": "deepseek-r1:14b"
}
}
}
}