Skip to main content
Glama
cruzleedan

personal-timesheet-mcp

by cruzleedan
README.md
# Timesheet MCP Server

A Model Context Protocol (MCP) server that provides CRUD operations for timesheet management via REST API endpoints.

> **šŸ‘¤ For End Users:** See [README-USER.md](README-USER.md) for simple installation instructions  
> **šŸ‘Øā€šŸ’» For Developers:** Continue reading below  
> **šŸ“¦ Publishing:** See [Publishing Guide](../docs/guides/mcp-publishing.md) to distribute your connector

## Features

- **Create** timesheet entries
- **Read** timesheet entries (list and get single)
- **Update** existing entries
- **Delete** timesheet entries
- **List Projects** for reference
- Configurable API base URL
- Support for both Go and Node.js backend APIs

## Prerequisites

- Node.js 18 or higher
- A running instance of the Timesheet Logger backend API
- Claude Desktop (for integration)

## Installation

1. Navigate to the mcp directory:

```bash
cd mcp
```

2. Install dependencies:

```bash
npm install
```

3. Configure environment variables:

```bash
cp .env.example .env
# Edit .env and set TIMESHEET_API_BASE_URL
```

4. Build the project:

```bash
npm run build
```

## Configuration

### Environment Variables

Create a `.env` file or set environment variables:

```bash
TIMESHEET_API_BASE_URL=http://localhost:3000/api
```

### Claude Desktop Integration

Add to your Claude Desktop configuration file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

**For end users (after publishing to npm):**

```json
{
  "mcpServers": {
    "timesheet": {
      "command": "timesheet-mcp",
      "env": {
        "TIMESHEET_API_BASE_URL": "http://localhost:3000/api"
      }
    }
  }
}
```

**For local development:**

```json
{
  "mcpServers": {
    "timesheet": {
      "command": "node",
      "args": ["/absolute/path/to/timesheet_logger/mcp/build/index.js"],
      "env": {
        "TIMESHEET_API_BASE_URL": "http://localhost:3000/api"
      }
    }
  }
}
```

## Usage

### Development Mode

Run in development mode with auto-reload:

```bash
npm run dev
```

### Production Mode

Build and run:

```bash
npm run build
npm start
```

## Available Tools

### 1. create_timesheet_entry

Create a new timesheet entry.

**Parameters:**

- `project_id` (string, required): Project ID
- `date` (string, required): Entry date (YYYY-MM-DD)
- `hours` (number, required): Hours worked
- `description` (string, optional): Entry description
- `billable` (boolean, optional): Whether entry is billable (default: true)

### 2. list_timesheet_entries

List timesheet entries with optional filters.

**Parameters:**

- `start_date` (string, optional): Filter by start date (YYYY-MM-DD)
- `end_date` (string, optional): Filter by end date (YYYY-MM-DD)
- `project_id` (string, optional): Filter by project ID
- `limit` (number, optional): Maximum results (default: 50)
- `offset` (number, optional): Offset for pagination (default: 0)

### 3. get_timesheet_entry

Get a single timesheet entry by ID.

**Parameters:**

- `entry_id` (string, required): Entry ID

### 4. update_timesheet_entry

Update an existing timesheet entry.

**Parameters:**

- `entry_id` (string, required): Entry ID
- `project_id` (string, optional): New project ID
- `date` (string, optional): New date (YYYY-MM-DD)
- `hours` (number, optional): New hours
- `description` (string, optional): New description
- `billable` (boolean, optional): New billable status

### 5. delete_timesheet_entry

Delete a timesheet entry.

**Parameters:**

- `entry_id` (string, required): Entry ID

### 6. list_projects

List available projects.

**Parameters:** None

### 7. create_project

Create a new project. Requires admin or manager role.

**Parameters:**

- `name` (string, required): Project name
- `description` (string, optional): Project description
- `is_active` (boolean, optional): Whether project is active (default: true)

### 8. login

Manually trigger browser-based login. Opens a browser window for authentication.

**Parameters:** None

**Note:** Useful after logout or for manual authentication. If already logged in, will show current user.

### 9. logout

Logout from the current session and clear stored authentication tokens.

**Parameters:** None

**Note:** After logout, you will need to re-authenticate (via browser login) on the next request.

## Testing

### Test with Local Backend

1. Start your backend API:

```bash
# From backend/api-nodejs or backend/api-go
docker-compose up
```

2. Run the MCP server:

```bash
npm run dev
```

3. Test through Claude Desktop or use the MCP Inspector

## Troubleshooting

### Connection Refused

- Ensure the backend API is running
- Verify the `TIMESHEET_API_BASE_URL` is correct
- Check that the port matches your backend configuration

### Authentication Errors

- Verify API key if required by your backend
- Check that the API endpoint supports the operations

### Tool Not Found

- Rebuild the project: `npm run build`
- Restart Claude Desktop
- Verify the path in Claude Desktop config is absolute

## Development

### Project Structure

```
mcp/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.ts              # Main MCP server entry point
│   ā”œā”€ā”€ config.ts             # Configuration management
│   ā”œā”€ā”€ types.ts              # TypeScript types
│   ā”œā”€ā”€ api/
│   │   ā”œā”€ā”€ client.ts         # HTTP client wrapper
│   │   └── timesheet.ts      # Timesheet API operations
│   └── tools/
│       ā”œā”€ā”€ create-entry.ts   # Create tool
│       ā”œā”€ā”€ list-entries.ts   # List tool
│       ā”œā”€ā”€ get-entry.ts      # Get tool
│       ā”œā”€ā”€ update-entry.ts   # Update tool
│       └── delete-entry.ts   # Delete tool
ā”œā”€ā”€ build/                    # Compiled output
ā”œā”€ā”€ package.json
ā”œā”€ā”€ tsconfig.json
└── README.md
```

### Adding New Tools

1. Create a new file in `src/tools/`
2. Define the tool schema using Zod
3. Implement the handler function
4. Register the tool in `src/index.ts`

## License

MIT

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct action and resource. Login and logout are separate from project and timesheet entry operations, and CRUD tools for timesheet entries are clearly delineated.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., create_project, list_timesheet_entries), but 'login' and 'logout' are single words, breaking the pattern slightly. Overall structure is clear.

Tool Count5/5

With 9 tools spanning authentication, project management, and timesheet entry CRUD, the count is well-scoped for the domain without being excessive or thin.

Completeness4/5

Core workflows are covered: authentication, project listing and creation, and full CRUD on timesheet entries. Missing project update/delete, but these are less critical for typical timesheet use.

Maintenance

ActivityInactive
ResponsivenessNo issues