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