# ๐ŸŒพ Harvest MCP Server [![npm version](https://badge.fury.io/js/@ianaleck%2Fharvest-mcp-server.svg)](https://www.npmjs.com/package/@ianaleck/harvest-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Tests](https://img.shields.io/badge/Tests-Passing-green)](https://github.com/ianaleck/harvest-mcp-server) [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/ianaleck) > **Unofficial** Model Context Protocol (MCP) server for seamless integration with the Harvest time tracking API **โš ๏ธ Disclaimer:** This is an unofficial, third-party integration with the Harvest API. This project is not affiliated with, endorsed by, or sponsored by Harvest or Forecast (the company behind Harvest). [![harvest-mcp-server MCP server](https://glama.ai/mcp/servers/ianaleck/harvest-mcp-server/badges/card.svg)](https://glama.ai/mcp/servers/ianaleck/harvest-mcp-server) ## โœจ Features - ๐Ÿ”— **Complete Harvest API v2 Coverage** - 40+ tools covering all major endpoints - ๐Ÿ›ก๏ธ **Type-Safe** - Full TypeScript support with Zod validation - โšก **High Performance** - Built with async/await and proper rate limiting - ๐Ÿงช **Thoroughly Tested** - Comprehensive unit, integration, and contract tests - ๐Ÿ“Š **Rich Logging** - Structured logging for debugging and monitoring - ๐Ÿ”„ **Auto-Retry** - Intelligent retry logic with exponential backoff - ๐Ÿ“– **MCP Compliant** - Works with Claude Desktop and other MCP clients ## ๐Ÿš€ Quick Start ### Prerequisites - Node.js 18+ - Harvest account with API access - MCP-compatible client (like Claude Desktop) ### Installation ```bash # Install globally npm install -g @ianaleck/harvest-mcp-server # Or install locally npm install @ianaleck/harvest-mcp-server ``` ### Configuration 1. **Get your Harvest API credentials:** - Go to Harvest โ†’ Settings โ†’ Developers โ†’ Personal Access Tokens - Create a new token - Note your Account ID (visible in URL or settings) 2. **Configure your MCP client** (e.g., Claude Desktop): ```json { "mcpServers": { "harvest": { "command": "npx", "args": ["-y", "@ianaleck/harvest-mcp-server"], "env": { "HARVEST_ACCESS_TOKEN": "your_harvest_personal_access_token", "HARVEST_ACCOUNT_ID": "your_harvest_account_id" } } } } ``` 3. **Start using with Claude!** ## ๐ŸŽฏ What You Can Do Once connected, you can ask Claude to help with: ### โฑ๏ธ Time Tracking - "Show me all my time entries for this week" - "Start a timer for the 'Development' task on the 'Website Project'" - "How many hours did I work on Project X last month?" ### ๐Ÿ“‹ Project Management - "List all active projects for client Acme Corp" - "Create a new project called 'Mobile App' for client TechStart" - "Show me project budget vs actual time spent" ### ๐Ÿ‘ฅ Team Management - "Who are all the users in our Harvest account?" - "Show me John's time entries for last week" ### ๐Ÿ’ฐ Financial Tracking - "Generate an expense report for Q4" - "Show me all unpaid invoices" - "What's our total billable hours this month?" ## ๐Ÿ› ๏ธ Available Tools
๐Ÿ“Š Company & Account (1 tool) - `get_company` - Get company information and settings
โฐ Time Entries (8 tools) - `list_time_entries` - List time entries with filtering - `get_time_entry` - Get specific time entry details - `create_time_entry` - Create new time entry - `update_time_entry` - Update existing time entry - `delete_time_entry` - Delete time entry - `start_timer` - Start a timer for a task - `stop_timer` - Stop running timer - `restart_timer` - Restart a previous time entry
๐Ÿ—๏ธ Projects (7 tools) - `list_projects` - List all projects with filtering - `get_project` - Get specific project details - `create_project` - Create new project - `update_project` - Update project details - `delete_project` - Delete project - `list_project_task_assignments` - List task assignments for project - `create_project_task_assignment` - Assign task to project - `update_project_task_assignment` - Update task assignment - `delete_project_task_assignment` - Remove task assignment
๐Ÿ“ Tasks (5 tools) - `list_tasks` - List all tasks - `get_task` - Get specific task details - `create_task` - Create new task - `update_task` - Update task details - `delete_task` - Delete task
๐Ÿข Clients (5 tools) - `list_clients` - List all clients - `get_client` - Get specific client details - `create_client` - Create new client - `update_client` - Update client details - `delete_client` - Delete client
๐Ÿ‘ค Users (6 tools) - `list_users` - List all users in account - `get_user` - Get specific user details - `get_current_user` - Get current authenticated user - `create_user` - Create new user - `update_user` - Update user details - `delete_user` - Delete user
๐Ÿ’ธ Expenses (6 tools) - `list_expenses` - List expenses with filtering - `get_expense` - Get specific expense details - `create_expense` - Create new expense - `update_expense` - Update expense details - `delete_expense` - Delete expense - `list_expense_categories` - List all expense categories
๐Ÿงพ Invoices (5 tools) - `list_invoices` - List invoices with filtering - `get_invoice` - Get specific invoice details - `create_invoice` - Create new invoice - `update_invoice` - Update invoice details - `delete_invoice` - Delete invoice
๐Ÿ“‹ Estimates (5 tools) - `list_estimates` - List estimates with filtering - `get_estimate` - Get specific estimate details - `create_estimate` - Create new estimate - `update_estimate` - Update estimate details - `delete_estimate` - Delete estimate
๐Ÿ“ˆ Reports (4 tools) - `get_time_report` - Generate time reports with filtering - `get_expense_report` - Generate expense reports - `get_project_budget_report` - Get project budget analysis - `get_uninvoiced_report` - Get uninvoiced time and expenses
## ๐Ÿงช Development ### Setup ```bash git clone https://github.com/ianaleck/harvest-mcp-server.git cd harvest-mcp-server npm install ``` ### Environment Configuration ```bash cp .env.example .env # Edit .env with your Harvest API credentials ``` ### Testing ```bash # Run all tests npm test # Run with coverage npm run test:coverage # Run specific test suites npm run test:unit npm run test:integration npm run test:contract ``` ### Building ```bash # Build for production npm run build # Start development server npm run dev ``` ## ๐Ÿ“‹ API Requirements This server requires a Harvest account with API access. Users must comply with: - [Harvest API Terms of Service](https://help.getharvest.com/api-v2/introduction/overview/general/) - [Harvest API Rate Limits](https://help.getharvest.com/api-v2/introduction/overview/general/#rate-limiting) (100 requests per 15 seconds) ## ๐Ÿค Contributing We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details. 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Make your changes with tests 4. Ensure all tests pass (`npm test`) 5. Commit your changes (`git commit -m 'Add amazing feature'`) 6. Push to the branch (`git push origin feature/amazing-feature`) 7. Open a Pull Request ## ๐Ÿ“„ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## ๐Ÿ™ Acknowledgments - [Harvest](https://www.getharvest.com/) for providing an excellent time tracking API - [Model Context Protocol](https://modelcontextprotocol.io/) team for the MCP specification - [Anthropic](https://www.anthropic.com/) for Claude and the MCP SDK ## ๐Ÿ“ž Support - ๐Ÿ› **Bug Reports:** [GitHub Issues](https://github.com/ianaleck/harvest-mcp-server/issues) - ๐Ÿ’ก **Feature Requests:** [GitHub Discussions](https://github.com/ianaleck/harvest-mcp-server/discussions) - ๐Ÿ“– **Documentation:** [MCP Documentation](https://modelcontextprotocol.io/docs) ---
**Made with โค๏ธ for the MCP community** [โญ Star this project](https://github.com/ianaleck/harvest-mcp-server) if you find it useful!