Thank you for your interest in contributing to the OmniFocus MCP Server! This document provides guidelines for contributing to the project.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/omnifocus-mcp.git cd omnifocus-mcp
- macOS (OmniFocus is macOS-only)
- Python 3.10 or higher
- OmniFocus installed
Using UV (recommended):
# Install UV if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies
uv sync
# Run the server in development mode
uv run omnifocus-mcpUsing pip:
# Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install in editable mode
pip install -e .
# Run the server
omnifocus-mcp-
Create a new branch for your changes:
git checkout -b feature/your-feature-name
-
Make your changes, following these guidelines:
- Keep changes focused and atomic
- Write clear, descriptive commit messages
- Update documentation as needed
- Add docstrings to new functions
-
Test your changes:
# Build the package python3 -m build # Install and test pip install dist/omnifocus_mcp-*.whl
-
Commit your changes:
git add . git commit -m "Add: Brief description of your changes"
- Follow PEP 8 Python style guidelines
- Use type hints where appropriate
- Write descriptive docstrings for functions and classes
- Keep functions focused and manageable in size
When adding new OmniFocus tools:
- Add the tool function in
src/omnifocus_mcp/server.py - Use the
@mcp.tool()decorator - Include comprehensive docstring with:
- Tool description
- Parameter descriptions (Args section)
- Return value description
- Use AppleScript for OmniFocus interaction
- Handle errors gracefully
Example:
@mcp.tool()
async def my_new_tool(param: str) -> str:
"""
Brief description of what the tool does.
Args:
param: Description of the parameter
Returns:
Description of the return value
"""
try:
# Implementation
pass
except Exception as e:
return f"Error: {str(e)}"Before submitting a pull request:
-
Test that the package builds successfully:
python3 -m build
-
Test the CLI entry point:
omnifocus-mcp
-
Test with an MCP client (like Claude Desktop) if possible
-
Push your changes to your fork:
git push origin feature/your-feature-name
-
Create a pull request on GitHub
-
Provide a clear description of:
- What changes you made
- Why you made them
- How to test them
If you have questions or need help, feel free to:
- Open an issue on GitHub
- Ask questions in your pull request
- Be respectful and inclusive
- Focus on constructive feedback
- Help make the project welcoming for everyone
Thank you for contributing! 🎉