Skip to main content
Glama
djm81
by djm81
developer_guide.md10.5 kB
# Developer Guide for Log Analyzer MCP This guide provides instructions for developers working on the `log-analyzer-mcp` project, covering environment setup, testing, building, running the MCP server, and release procedures. ## Development Environment This project uses `hatch` for environment and project management. 1. **Install Hatch:** Follow the instructions on the [official Hatch website](https://hatch.pypa.io/latest/install/). 2. **Clone the repository:** ```bash git clone <repository-url> # Replace <repository-url> with the actual URL cd log_analyzer_mcp ``` 3. **Activate the Hatch environment:** From the project root directory: ```bash hatch shell ``` This command creates a virtual environment (if it doesn't exist) and installs all project dependencies defined in `pyproject.toml`. The `log-analyzer` CLI tool will also become available within this activated shell. ## Testing Guidelines Consistent and thorough testing is crucial. ### Always Use Hatch for Tests Standard tests should **always** be run via the built-in Hatch `test` command, not directly with `pytest` or custom wrappers. Using `hatch test` ensures: - The proper Python versions (matrix) are used as defined in `pyproject.toml`. - Dependencies are correctly resolved for the test environment. - Environment variables are properly set. - Coverage reports are correctly generated and aggregated. **Common Test Commands:** - **Run all tests (default matrix, standard output):** ```bash hatch test ``` - **Run tests with coverage report and verbose output:** ```bash hatch test --cover -v ``` (The `-v` flag increases verbosity. Coverage data is typically stored in `logs/tests/coverage/`) - **Generate HTML coverage report:** After running tests with `--cover`, you can generate an HTML report. The specific command might be an alias in `pyproject.toml` (e.g., `run-cov-report:html`) or a direct `coverage` command: ```bash # Example using a hatch script alias (check pyproject.toml for exact command) hatch run cov-report:html # Or, if run-cov has already created the .coverage file: hatch run coverage html -d logs/tests/coverage/htmlcov ``` The HTML report is typically generated in `logs/tests/coverage/htmlcov/`. - **Run tests for a specific Python version (e.g., Python 3.10):** (Assumes `3.10` is defined in your hatch test environment matrix in `pyproject.toml`) ```bash hatch -e py310 test # Or the specific environment name, e.g., hatch -e test-py310 test # To run with coverage for a specific version: hatch -e py310 run test-cov # Assuming 'test-cov' is a script in hatch.toml for that env ``` - **Target specific test files or directories:** You can pass arguments to `pytest` through `hatch test`: ```bash hatch test tests/log_analyzer_mcp/test_analysis_engine.py hatch test --cover -v tests/log_analyzer_mcp/ ``` ### Integrating `chroma-mcp-server` for Enhanced Testing If the `chroma-mcp-server` package (included as a development dependency) is available in your Hatch environment, it enables an enhanced testing workflow. This is activated by adding the `--auto-capture-workflow` flag to your `hatch test` commands. **Purpose:** The primary benefit of this integration is to capture detailed information about test runs, including failures and subsequent fixes. This data can be used by `chroma-mcp-server` to build a knowledge base, facilitating "Test-Driven Learning" and helping to identify patterns or recurring issues. **How to Use:** When `chroma-mcp-server` is part of your development setup, modify your test commands as follows: - **Run all tests with auto-capture:** ```bash hatch test --auto-capture-workflow ``` - **Run tests with coverage, verbose output, and auto-capture:** ```bash hatch test --cover -v --auto-capture-workflow ``` - **Target specific tests with auto-capture:** ```bash hatch test --cover -v --auto-capture-workflow tests/log_analyzer_mcp/ ``` By including `--auto-capture-workflow`, `pytest` (via a plugin provided by `chroma-mcp-server`) will automatically log the necessary details of the test session for further analysis and learning. ### Avoid Direct `pytest` Usage ❌ **Incorrect:** ```bash python -m pytest tests/ ``` ✅ **Correct (using Hatch):** ```bash hatch test ``` ## Build Guidelines To build the package (e.g., for distribution or local installation): 1. **Using the `build.sh` script (Recommended):** This script may handle additional pre-build steps like version synchronization. ```bash ./scripts/build.sh ``` 2. **Using Hatch directly:** ```bash hatch build ``` Both methods generate the distributable files (e.g., `.whl` and `.tar.gz`) in the `dist/` directory. ## Installing and Testing Local Builds (IDE/CLI) After making changes to the MCP server or CLI, you need to rebuild and reinstall the package within the Hatch environment for those changes to be reflected when: - Cursor (or another IDE) runs the MCP server. - You use the `log-analyzer` CLI directly. **Steps:** 1. **Build the package:** ```bash hatch build ``` 2. **Uninstall the previous version and install the new build:** Replace `<version>` with the actual version string from the generated wheel file in `dist/` (e.g., `0.2.7`). ```bash hatch run pip uninstall log-analyzer-mcp -y && hatch run pip install dist/log_analyzer_mcp-<version>-py3-none-any.whl ``` 3. **Reload MCP in IDE:** If you are testing with Cursor or a similar IDE, you **must manually reload the MCP server** within the IDE. Cursor does not automatically pick up changes to reinstalled MCP packages. ## Running the MCP Server The `.cursor/mcp.json` file defines configurations for running the MCP server in different modes. Here's how to understand and use them: ### Development Mode (`log_analyzer_mcp_server_dev`) - **Purpose:** For local development and iterative testing. Uses the local source code directly via a shell script. - **Configuration (`.cursor/mcp.json` snippet):** ```json "log_analyzer_mcp_server_dev": { "command": "/Users/dominikus/git/nold-ai/log_analyzer_mcp/scripts/run_log_analyzer_mcp_dev.sh", "args": [], "env": { "PYTHONUNBUFFERED": "1", "PYTHONIOENCODING": "utf-8", "PYTHONPATH": "/Users/dominikus/git/nold-ai/log_analyzer_mcp", // Points to project root "MCP_LOG_LEVEL": "DEBUG", "MCP_LOG_FILE": "/Users/dominikus/git/nold-ai/log_analyzer_mcp/logs/mcp/log_analyzer_mcp_server.log" } } ``` - **How to run:** This configuration is typically selected within Cursor when pointing to your local development setup. The `run_log_analyzer_mcp_dev.sh` script likely activates the Hatch environment and runs `src/log_analyzer_mcp/log_analyzer_mcp_server.py`. ### Test Package Mode (`log_analyzer_mcp_server_test`) - **Purpose:** For testing the packaged version of the server, usually installed from TestPyPI. This helps verify that packaging, dependencies, and entry points work correctly. - **Configuration (`.cursor/mcp.json` snippet):** ```jsonc "log_analyzer_mcp_server_test": { "command": "uvx", // uvx is a tool to run python executables from venvs "args": [ "--refresh", "--default-index", "https://test.pypi.org/simple/", "--index", "https://pypi.org/simple/", "--index-strategy", "unsafe-best-match", "log_analyzer_mcp_server@latest" // Installs/runs the latest from TestPyPI ], "env": { "MCP_LOG_LEVEL": "INFO", "MCP_LOG_FILE": "/Users/dominikus/git/nold-ai/log_analyzer_mcp/logs/mcp/log_analyzer_mcp_server.log" } } ``` - **How to run:** This configuration would be selected in an environment where you want to test the package as if it were installed from TestPyPI. ### Production Mode (`log_analyzer_mcp_server_prod`) - **Purpose:** For running the stable, released version of the MCP server, typically installed from PyPI. - **Configuration (`.cursor/mcp.json` snippet):** ```jsonc "log_analyzer_mcp_server_prod": { "command": "uvx", "args": [ "log_analyzer_mcp_server" // Installs/runs the latest from PyPI (or specific version) ], "env": { "MCP_LOG_LEVEL": "INFO", "MCP_LOG_FILE": "/Users/dominikus/git/nold-ai/log_analyzer_mcp/logs/mcp/log_analyzer_mcp_server.log" } } ``` - **How to run:** This is how an end-user project would typically integrate the released `log-analyzer-mcp` package. *(Note: The absolute paths in the `_dev` configuration are specific to the user's machine. In a shared context, these would use relative paths or environment variables.)* ## Release Guidelines When preparing a new release: 1. **Update `CHANGELOG.md`:** - Add a new section at the top for the new version (e.g., `## [0.2.0] - YYYY-MM-DD`). - Document all significant changes under "Added", "Fixed", "Changed", or "Removed" subheadings. - Use clear, concise language. 2. **Update Version:** The version number is primarily managed in `pyproject.toml`. - If using `hatch-vcs`, the version might be derived from Git tags. - If `[tool.hatch.version].path` is set (e.g., to `src/log_analyzer_mcp/__init__.py`), ensure that file is updated. - The `/scripts/release.sh` script (if used) should handle version bumping and consistency. A `setup.py` file, if present, is typically minimal, and its versioning is also handled by Hatch or the release script. 3. **Build and Test:** - Build the package: `./scripts/build.sh` or `hatch build`. - Verify the correct version appears in the built artifacts (`dist/`). - Thoroughly test the new version, including installing and testing the built package. 4. **Tag and Release:** - Create a Git tag for the release (e.g., `git tag v0.2.0`). - Push the tag to the remote: `git push origin v0.2.0`. - Publish the package to PyPI (usually handled by the release script or a CI/CD pipeline). 5. **Complete Documentation:** - Ensure all documentation (READMEs, user guides, developer guides) is updated to reflect the new version and any changes. *(This Developer Guide supersedes `docs/rules/testing-and-build-guide.md`. The latter can be removed or archived after this guide is finalized.)*

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/djm81/log_analyzer_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server