productive-time-mcp
MCP (Model Context Protocol) server for Productive.io time tracking operations.
This is a companion MCP to berwickgeek/productive-mcp that adds time tracking capabilities not included in the original.
Features
- Time Entry Management: Create, read, update, and delete time entries
- Time Reports: Get hours summaries (worked, client, internal, holidays)
- Employee Hours: Search employees by name and get their workload
- Billing Cutoff Logic: Configurable automatic period selection for invoice workflows
Installation
Using uvx (recommended)
uvx --from git+https://github.com/adamchrabaszcz/productive-time-mcp productive-time-mcp
Using pip
pip install git+https://github.com/adamchrabaszcz/productive-time-mcp
Configuration
Environment Variables
| Variable | Required | Description |
|---|---|---|
PRODUCTIVE_API_TOKEN |
Yes | Your Productive.io API token |
PRODUCTIVE_ORG_ID |
Yes | Your organization ID |
PRODUCTIVE_USER_ID |
No | Your person ID (enables "me" references) |
PRODUCTIVE_BILLING_CUTOFF_DAY |
No | Day of month when billing period switches (default: 10) |
Billing Cutoff Day
The PRODUCTIVE_BILLING_CUTOFF_DAY controls automatic period selection for invoice processing:
- Before cutoff day: Defaults to previous month (still processing invoices)
- From cutoff day onwards: Defaults to current month
Example with PRODUCTIVE_BILLING_CUTOFF_DAY=10:
Feb 28 → February (after cutoff, in Feb's billing window)
Mar 1-9 → February (before cutoff, still in Feb's billing window)
Mar 10+ → March (new billing period)
This is useful when processing invoices that arrive at month boundaries.
Getting Your IDs
Organization ID:
- Go to Productive.io Settings
- The org ID is visible in API requests or can be found via the API
Person ID:
curl -H "X-Auth-Token: YOUR_TOKEN" \
-H "X-Organization-Id: YOUR_ORG_ID" \
"https://api.productive.io/api/v2/people?filter[email]=your.email@company.com"
API Token:
- Go to Productive > Settings > API Integrations
- Create a new token or use existing
Usage with Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"productive-time": {
"command": "uvx",
"args": ["--from", "git+https://github.com/adamchrabaszcz/productive-time-mcp", "productive-time-mcp"],
"env": {
"PRODUCTIVE_API_TOKEN": "${PRODUCTIVE_API_TOKEN}",
"PRODUCTIVE_ORG_ID": "${PRODUCTIVE_ORG_ID}",
"PRODUCTIVE_USER_ID": "${PRODUCTIVE_USER_ID}"
}
}
}
}
Available Tools
Read Operations
| Tool | Description |
|---|---|
get_person |
Find a person by name or email |
get_time_reports |
Get hours summary for a period |
get_time_entries |
List time entries for a period |
get_time_entry |
Get single time entry with details |
get_my_hours |
Get current user's hours summary |
get_employee_hours |
Get any employee's hours by name |
Write Operations
| Tool | Description |
|---|---|
create_time_entry |
Log time to a service/task |
update_time_entry |
Modify existing time entry |
delete_time_entry |
Remove a time entry |
Examples
Get My Hours This Month
"Show my hours for this month"
Check Employee Hours
"How many hours did John Doe work this month?"
"Get Maria's worklog for January 2024"
Log Time
"Log 2 hours on API integration today"
Development
# Clone and install
git clone https://github.com/adamchrabaszcz/productive-time-mcp
cd productive-time-mcp
pip install -e ".[dev]"
# Run tests
pytest
# Run locally
export PRODUCTIVE_API_TOKEN="your-token"
export PRODUCTIVE_ORG_ID="your-org-id"
python -m productive_time_mcp
License
MIT License - see LICENSE for details.
Related Projects
- berwickgeek/productive-mcp - Tasks, projects, boards (complementary MCP)
- druellan/productive-mcp - Alternative Python implementation
Metadata
Release files for productive-time-mcp 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| productive_time_mcp-0.2.1.tar.gz | 71.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| productive_time_mcp-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 83.3 kB
Release files / productive_time_mcp-0.2.1.tar.gz
| Download URL | productive_time_mcp-0.2.1.tar.gz |
|---|---|
| Size | 71.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6e9bbd12f7eff6f5b8c7186a94d5ef5b8cbb0e8a645f9ebac4cb5a9f6e1ff56c
|
|
BLAKE2b-256 checksum How to use checksums |
67409ad04b516967e1a6766275686ea95fa98f46e71edbd15552e205421f8d8c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / productive_time_mcp-0.2.1-py3-none-any.whl
| Download URL | productive_time_mcp-0.2.1-py3-none-any.whl |
|---|---|
| Size | 11.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5af857b069a85999e44803b3faab53489702a1de93b9bf5aadeace3628e3521d
|
|
BLAKE2b-256 checksum How to use checksums |
e9f72a8d3417c53f185fc8150ee6e6731c01791c524099da3aec138f8910a76f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for productive-time-mcp 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.