Skip to main content
Glama
cyborgx0x

OpenProject MCP Server

by cyborgx0x
README.md
# OpenProject MCP Server

Model Context Protocol (MCP) server for OpenProject API integration. Enables AI assistants to interact with OpenProject work packages, projects, and time tracking.

## Installation

### Global Installation (Recommended)

```bash
npm install -g openproject-mcp
```

### Local Installation

```bash
npm install openproject-mcp
```

## Configuration

### Get OpenProject API Key

1. Log into your OpenProject instance
2. Go to **My Account** → **Access tokens**
3. Create a new API token
4. Copy the token

### Add to Kiro MCP Config

Add to `.kiro/settings/mcp.json`:

```json
{
  "mcpServers": {
    "openproject": {
      "command": "npx",
      "args": ["-y", "openproject-mcp"],
      "env": {
        "OPENPROJECT_URL": "https://your-openproject-instance.com",
        "OPENPROJECT_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

Or if installed globally:

```json
{
  "mcpServers": {
    "openproject": {
      "command": "openproject-mcp",
      "env": {
        "OPENPROJECT_URL": "https://your-openproject-instance.com",
        "OPENPROJECT_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

## Available Tools

| Tool | Description |
|------|-------------|
| `list_projects` | List all projects |
| `get_work_package` | Get work package details by ID |
| `list_work_packages` | List work packages with filters |
| `get_children` | Get child work packages of a parent |
| `list_statuses` | List all available statuses |
| `list_types` | List all work package types (Feature, Task, Bug, etc.) |
| `get_user` | Get user information |
| `create_work_package` | Create a new work package |
| `update_work_package` | Update an existing work package |
| `log_time` | Log time entry for a work package |
| `raw_api_call` | Make a raw API call to any endpoint |

## Usage Examples

### List Children of a Feature

```javascript
get_children({ parentId: 211 })
```

### Create a New Task

```javascript
create_work_package({
  subject: "Implement token budget management",
  parentId: 538,
  assigneeId: 10,
  startDate: "2026-01-15",
  dueDate: "2026-01-15"
})
```

### List Tasks Assigned to Me

```javascript
list_work_packages({ assigneeId: "me" })
```

### Update Work Package Status

```javascript
update_work_package({
  id: 123,
  statusId: 12,  // Status ID from list_statuses
  estimatedTime: "PT2H"  // 2 hours in ISO 8601 format
})
```

### Log Time

```javascript
log_time({
  workPackageId: 123,
  hours: 2.5,
  comment: "Implemented feature X",
  spentOn: "2026-01-23"
})
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `OPENPROJECT_URL` | Yes | Your OpenProject instance URL |
| `OPENPROJECT_API_KEY` | Yes | API key from OpenProject |

## Requirements

- Node.js >= 18.0.0
- OpenProject instance with API access

## License

MIT

## Contributing

Contributions are welcome! Please open an issue or submit a pull request.

## Links

- [OpenProject API Documentation](https://www.openproject.org/docs/api/)
- [Model Context Protocol](https://modelcontextprotocol.io/)

TDQS

B3.3/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes targeting specific resources like work packages, projects, users, and statuses. However, 'list_work_packages' and 'get_work_package' could potentially be confused with 'get_children' for hierarchical queries, but descriptions clarify their scopes. The 'raw_api_call' tool stands out as a catch-all that might overlap with others but serves a different low-level purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with clear, descriptive actions like 'create_work_package', 'list_projects', and 'update_work_package'. There are no deviations in style or convention, making the set predictable and easy to parse for an agent.

Tool Count5/5

With 11 tools, the count is well-scoped for managing work packages and related entities in OpenProject. Each tool serves a clear function, such as CRUD operations for work packages and supporting queries for projects, statuses, and types, without feeling bloated or insufficient.

Completeness4/5

The toolset provides strong coverage for core work package operations, including create, get, update, list, and hierarchical queries, along with essential supporting functions like logging time and listing projects, statuses, and types. A minor gap exists in the lack of delete operations for work packages or other entities, which agents might need to work around using 'raw_api_call'.

Maintenance

ActivityInactive
ResponsivenessNo issues