Thank you for your interest in contributing!
This is an UNOFFICIAL project using reverse-engineered APIs:
- TimeTree may change their API at any time
- Focus on read-only functionality only
- Be respectful and constructive
Before creating a bug report:
- Check if the bug has already been reported in Issues
- Verify you're using the latest version
- Test with different credentials/calendars to isolate the issue
When reporting a bug, include:
- MCP server version (
npm run buildoutput) - Node.js version (
node --version) - Operating system
- Steps to reproduce
- Expected vs actual behavior
- Relevant log output (with sensitive data removed)
Security Note: Never include your TimeTree credentials in bug reports!
Feature suggestions are welcome, but keep in mind:
- Focus on read-only operations (calendars, events)
- Avoid features that could overload TimeTree's servers
- Consider if the feature benefits most users
- Fork the repository
- Create a branch from
main:git checkout -b feature/your-feature-name
- Make your changes:
- Follow the existing code style
- Add/update tests if applicable
- Update documentation
- Test your changes:
npm run build npm run dev # for watch mode - Commit with a clear message:
git commit -m "feat: add support for event categories" - Push to your fork:
git push origin feature/your-feature-name
- Open a Pull Request against
main
- Node.js >= 18.0.0
- npm or yarn
- A TimeTree account (for testing)
git clone https://github.com/ehs208/TimeTree-MCP.git
cd TimeTree-MCP
npm install
npm run buildTimeTree-MCP/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── config/
│ │ └── config.ts # API endpoints and constants
│ ├── utils/
│ │ ├── logger.ts # Structured logging
│ │ ├── http-client.ts # HTTP wrapper
│ │ └── rate-limiter.ts # Token bucket rate limiter
│ ├── client/
│ │ ├── auth.ts # Authentication manager
│ │ └── api.ts # TimeTree API client
│ ├── tools/
│ │ ├── index.ts # Tool registration
│ │ ├── calendar-tools.ts # Calendar operations
│ │ └── event-tools.ts # Event operations
│ └── types/
│ └── timetree.ts # TypeScript/Zod types
└── dist/ # Build output
Currently, testing is manual via MCP Inspector:
npx @modelcontextprotocol/inspector dist/index.jsSet environment variables:
[email protected]
TIMETREE_PASSWORD=your-password
Future: We plan to add automated tests with mocked APIs.
- TypeScript: Use strict mode
- Formatting: Follow existing style (consider adding Prettier/ESLint)
- Naming:
- Functions:
camelCase - Classes:
PascalCase - Constants:
UPPER_SNAKE_CASE
- Functions:
- Comments: Use JSDoc for public APIs
- Imports: Use explicit
.jsextensions for ESM
Follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesrefactor:Code refactoringtest:Adding testschore:Maintenance tasks
Examples:
feat: add calendar filtering by name
fix: handle network timeout errors
docs: update installation instructions
refactor: simplify pagination logic
If TimeTree changes their API:
- Document the change in an issue
- Update the affected code
- Update
src/config/config.tswith new endpoints - Update type definitions in
src/types/timetree.ts - Test thoroughly
- Update CHANGELOG.md
When adding features:
- Update README.md and README.ko.md (both English and Korean)
- Add JSDoc comments to public functions
- Update CHANGELOG.md under
[Unreleased]
Maintainers will:
- Update version in
package.json - Update CHANGELOG.md
- Create a git tag (
v0.x.x) - Create a GitHub release
Open an Issue for questions or bugs.
By contributing, you agree that your contributions will be licensed under the MIT License.