Skip to main content
Glama
README.md
# Timesheet Assistant MCP

An MCP (Model Context Protocol) server for generating timesheets and submitting them to PSI Project Server (SharePoint-based timesheet systems).

## Features

- **Timesheet Generation**: Generate daily, weekly, monthly, or custom date range timesheets
- **PSI Integration**: Automated submission to PSI Project Server
- **Activity Data Integration**: Works with [Activity Collector MCP](https://github.com/srdmathur/activity-collector-mcp) for data fetching
- **Smart Summarization**: Automatically summarizes work descriptions to 255 characters
- **Browser Automation**: Uses Puppeteer for SharePoint authentication and form filling
- **Task Management**: Hierarchical task tree navigation for PSI

## Prerequisites

**⚠️ Important**: This MCP requires [Activity Collector MCP](https://github.com/srdmathur/activity-collector-mcp) to fetch activity data from GitLab, GitHub, and Calendar services.

## Installation

### Via npx (Recommended)

```bash
npx timesheet-assistant-mcp
```

### Via npm

```bash
npm install -g timesheet-assistant-mcp
```

### From Source

```bash
git clone https://github.com/sharadmathuratthepsi/timesheet-mcp.git
cd timesheet-mcp
npm install
npm run build
```

## Configuration

### For Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "activity-collector": {
      "command": "npx",
      "args": ["activity-collector-mcp"]
    },
    "timesheet-assistant": {
      "command": "npx",
      "args": ["timesheet-assistant-mcp"]
    }
  }
}
```

### For Claude Code (VS Code)

Add to `~/Library/Application Support/Code/User/mcp.json`:

```json
{
  "servers": {
    "activity-collector": {
      "type": "stdio",
      "command": "npx",
      "args": ["activity-collector-mcp"]
    },
    "timesheet-assistant": {
      "type": "stdio",
      "command": "npx",
      "args": ["timesheet-assistant-mcp"]
    }
  }
}
```

### Configuration File

Create `~/.timesheet-assistant-mcp-config.json`:

```json
{
  "psi": {
    "url": "https://projectserver.thepsi.com/PWA/_layouts/15/pwa/Timesheet/MyTSSummary.aspx"
  }
}
```

## Usage

### First Time Setup

1. **Configure PSI credentials**:
   ```
   Configure PSI with username: YOUR_USERNAME and password: YOUR_PASSWORD
   ```

### Generating Timesheets

- **Daily**: `Generate timesheet for today`
- **Weekly**: `Generate timesheet for this week`
- **Monthly**: `Generate timesheet for November 2024`
- **Date Range**: `Generate timesheet from 2024-12-01 to 2024-12-07`

### Submitting to PSI

1. **Generate timesheet** (using Activity Collector MCP)
2. **Get PSI tasks** (call once, reuse for all days):
   ```
   Get PSI tasks for 2024-12-05
   ```
3. **Select task** from the hierarchical tree
4. **Submit timesheet**:
   ```
   Submit to PSI for 2024-12-05 with task index 3 and description "..."
   ```

## Available Tools (8)

### Timesheet Generation (4 tools)
- `generate_timesheet` - Generate monthly timesheet
- `generate_weekly_timesheet` - Generate weekly timesheet
- `generate_daily_timesheet` - Generate single day timesheet
- `generate_date_range_timesheet` - Generate custom date range timesheet

**Note**: These tools orchestrate the Activity Collector MCP to fetch data.

### PSI Integration (4 tools)
- `configure_psi` - Configure PSI credentials
- `get_psi_tasks` - Get available tasks from PSI (call once per timesheet period)
- `submit_to_psi` - Submit timesheet entry to PSI
- `inspect_psi_page` - Debug PSI page structure

## How It Works

### Timesheet Generation Flow
1. LLM calls timesheet generation tool (e.g., `generate_weekly_timesheet`)
2. Tool returns instructions for fetching data from Activity Collector MCP
3. LLM uses Activity Collector tools (`fetch_gitlab_activity`, `fetch_github_activity`, `fetch_google_calendar_events`)
4. LLM builds and formats the timesheet

### PSI Submission Flow
1. Call `get_psi_tasks` **once** to get available tasks
2. User selects a task by index
3. Call `submit_to_psi` for each day (reusing same task index)
4. Browser automation fills SharePoint form and saves

## PSI Integration Details

- Uses Puppeteer for browser automation
- Supports HTTP Basic Auth for SharePoint
- Handles lazy-loaded accordion trees for task selection
- Smart grid cell detection for SharePoint JSGrid
- Automatic form filling with MouseEvent simulation

## Security

- PSI credentials stored in `~/.timesheet-assistant-mcp-tokens.json` with restricted permissions (600)
- Browser runs in non-headless mode by default (can see what's happening)
- All data remains local

## Troubleshooting

### Activity Collector Not Available
```
Error: fetch_gitlab_activity tool not found
```
**Solution**: Install and configure [Activity Collector MCP](https://github.com/srdmathur/activity-collector-mcp)

### PSI Submission Fails
```
Error: Could not find hours cell
```
**Solution**: Run `inspect_psi_page` to check PSI page structure

### Browser Crashes
**Solution**: Ensure Puppeteer dependencies are installed:
```bash
npm install puppeteer
```

## License

MIT

## Contributing

Issues and pull requests welcome!

## Author

Sharad Mathur (sharad.mathur@thepsi.com)

## Related Projects

- [Activity Collector MCP](https://github.com/srdmathur/activity-collector-mcp) - Required companion MCP for data fetching