Skip to main content
Glama

OpenProject MCP Server

Claude를 OpenProject 인스턴스에 연결하기 위한 고품질 Model Context Protocol (MCP) 서버입니다. Claude가 대화에서 직접 프로젝트, 작업 패키지(work packages), 사용자, 시간 항목을 조회·검색·관리할 수 있게 해줍니다.

🚀 기능

✅ 프로젝트 접근 - 프로젝트 목록, 필터링, 상세 정보 조회
✅ 작업 패키지 관리 - 고급 필터링으로 작업, 버그, 기능 조회
✅ 전체 텍스트 검색 - 내용으로 작업 패키지 검색
✅ 활동 기록 - 작업 패키지의 변경 사항 및 댓글 확인
✅ 사용자 관리 - 사용자 목록 및 정보 조회
✅ 시간 항목 - 프로젝트, 사용자, 기간별 등록 시간 조회
✅ 스마트 페이지네이션 - 대용량 데이터 세트 지원
✅ 견고한 오류 처리 - 명확하고 실행 가능한 메시지
✅ 완전한 타입 지원 - 최대 타입 안전성을 위한 TypeScript

Related MCP server: OpenProject MCP Server

📋 사전 요구 사항

  • Node.js 18+ 또는 Bun 1.0+

  • API 접근이 가능한 OpenProject 13+ 인스턴스

  • OpenProject API 토큰 (Settings에서 생성 가능)

🔧 설치

1. 서버 클론 또는 다운로드

cd openproject-mcp-server

2. 의존성 설치

npm install
# o con bun
bun install

3. 환경 변수 설정

.env.example을 .env로 복사하고 값을 입력합니다:

cp .env.example .env

.env 편집:

OPENPROJECT_URL=https://openproject.empresa.com
OPENPROJECT_API_TOKEN=tu-token-api-aqui
OPENPROJECT_PAGE_SIZE=50

OpenProject에서 API 토큰 생성 방법:

  1. OpenProject에서 Administration → API & Webhooks → Personal Access Tokens로 이동합니다.

  2. "+ New Personal Access Token" 을 클릭합니다.

  3. 설명이 포함된 이름을 지정합니다 (예: "Claude MCP").

  4. 필요한 권한을 선택합니다:

    • ✅ view_work_packages

    • ✅ view_projects

    • ✅ view_users

    • ✅ view_time_entries

    • ✅ edit_work_packages (생성/편집이 필요한 경우)

  5. 생성된 토큰을 .env에 복사합니다.

4. 서버 컴파일

npm run build

🎯 사용 방법

옵션 A: Claude Code에서

  1. Claude Code를 엽니다.

  2. Settings → MCP Servers로 이동합니다.

  3. + Add Local Server를 클릭합니다.

  4. 설정:

    • Name: openproject

    • Command: node

    • Arguments: ["path/to/openproject-mcp-server/dist/index.js"]

    • Environment Variables: .env의 값들

  5. 저장하고 Claude에 다시 연결합니다.

옵션 B: 테스트를 위해 로컬에서 실행

npm run dev

그런 다음 다른 터미널에서 MCP Inspector를 사용합니다:

npm run inspect

각 도구를 테스트할 수 있는 웹 인터페이스가 열립니다.

옵션 C: Claude.ai에서

  1. claude.ai/code를 엽니다.

  2. Settings → MCP Servers로 이동합니다.

  3. 이 서버를 접근 가능한 호스트에 배포한 경우 원격 서버를 추가합니다.

  4. 접근 자격 증명을 설정합니다.

🛠️ 사용 가능한 도구

📦 프로젝트

list_projects

선택적 필터링으로 모든 프로젝트를 나열합니다.

매개변수:

  • offset (number, optional): 페이지네이션용

  • name_filter (string, optional): 이름으로 필터링

  • status (enum: "active" | "archived", optional): 상태로 필터링

예시:

Claude: List all active projects
→ OpenProject: Muestra proyectos activos

get_project

프로젝트의 전체 상세 정보를 가져옵니다.

매개변수:

  • project_id (string | number): 프로젝트 ID 또는 식별자


📋 작업 패키지 (Tasks)

list_work_packages

고급 필터링으로 작업 패키지를 나열합니다.

매개변수:

  • project_id (string | number, optional): 프로젝트로 필터링

  • status (string, optional): 상태 (예: "Open", "In Progress")

  • priority (string, optional): 우선순위

  • assignee_id (number, optional): 담당 사용자

  • search (string, optional): 텍스트 검색

  • offset (number, optional): 페이지네이션

get_work_package

작업 패키지의 전체 상세 정보를 가져옵니다.

매개변수:

  • work_package_id (number): 작업 패키지 ID

get_work_package_activities

변경 기록과 댓글을 가져옵니다.

매개변수:

  • work_package_id (number): 작업 패키지 ID

search_work_packages

작업 패키지 전체 텍스트 검색.

매개변수:

  • query (string, required): 검색어

  • project_id (string | number, optional): 프로젝트로 제한

  • status (string, optional): 상태로 필터링

  • priority (string, optional): 우선순위로 필터링


👤 사용자

list_users

OpenProject의 모든 사용자를 나열합니다.

매개변수:

  • offset (number, optional): 페이지네이션

get_user

특정 사용자의 상세 정보를 가져옵니다.

매개변수:

  • user_id (number): 사용자 ID


⏱️ 시간 항목

list_time_entries

기간, 사용자, 프로젝트별 필터링으로 시간 항목을 나열합니다.

매개변수:

  • work_package_id (number, optional): 작업 패키지로 필터링

  • user_id (number, optional): 사용자로 필터링

  • project_id (string | number, optional): 프로젝트로 필터링

  • from_date (string, optional): 시작 날짜 (YYYY-MM-DD)

  • to_date (string, optional): 종료 날짜 (YYYY-MM-DD)

  • offset (number, optional): 페이지네이션

get_time_entry

시간 항목의 상세 정보를 가져옵니다.

매개변수:

  • time_entry_id (number): 시간 항목 ID


✍️ 쓰기 (에픽 및 사용자 스토리 생성)

list_project_types

프로젝트에서 사용 가능한 작업 패키지 유형(Epic, User Story, Task, Bug 등)을 ID와 함께 나열합니다. 먼저 사용하세요 — 유형 ID는 OpenProject 인스턴스마다 다릅니다.

매개변수:

  • project_id (string | number): 프로젝트 ID 또는 식별자

create_work_package

작업 패키지(에픽, 사용자 스토리, 작업 등)를 생성합니다. parent_id를 사용하여 사용자 스토리를 해당 에픽 아래에 배치합니다.

매개변수:

  • project_id (string | number)

  • subject (string)

  • description (string, optional, Markdown)

  • type_id (number, optional): list_project_types로 얻은 유형 ID

  • parent_id (number, optional): 상위 에픽 ID

  • priority_id, assignee_id, start_date, due_date (optional)

create_work_packages_bulk

한 번의 호출로 여러 작업 패키지를 생성합니다(Word에서 추출한 모든 사용자 스토리를 업로드하는 데 이상적). 각 항목은 자체 parent_id를 가질 수 있으므로 서로 다른 에픽의 스토리를 같은 호출에서 생성할 수 있습니다. 항목별 보고서(성공/실패)를 반환하며, 하나가 실패해도 전체 배치가 중단되지 않습니다.

매개변수:

  • project_id (string | number)

  • items (array, 최대 100): 각 항목은 create_work_package와 동일한 필드(project_id 제외)를 가짐


📋 워크플로: Word에서 에픽 및 사용자 스토리 업로드

팀의 일반적인 사용 사례: .docx로 작성된 사용자 스토리가 있고, 에픽 → 스토리 관계를 유지하면서 OpenProject에 업로드해야 합니다.

  1. 개인 API 토큰을 생성합니다 (각 개발자는 자신의 토큰을 사용, 위 참조) 및 로컬 .env를 설정합니다.

  2. Claude와의 대화를 열고 에픽/스토리가 포함된 .docx 파일을 첨부하거나 참조합니다 (Claude가 직접 읽을 수 있음).

  3. Claude에게 요청합니다: "이 Word 파일을 읽고, 에픽과 사용자 스토리를 식별한 다음, OpenProject의 X 프로젝트에 업로드해줘".

  4. Claude는 일반적으로 수동으로 조정할 필요 없이 다음을 수행합니다:

    • 프로젝트에 대해 list_project_types를 호출하여 Epic 및 User Story의 type_id를 확인합니다.

    • 각 에픽에 대해 create_work_package를 호출합니다(수량이 적으므로 ID를 얻기 위해 하나씩 생성).

    • 각 스토리에 해당하는 에픽의 parent_id를 사용하여 create_work_packages_bulk로 사용자 스토리를 생성합니다.

  5. 최종 보고서(생성된 항목, 실패한 항목)를 검토하고 필요시 OpenProject에서 수정합니다.

참고: 생성(읽기 전용이 아닌)을 위해서는 토큰에 edit_work_packages 권한이 필요합니다(토큰 생성 섹션 참조).

📊 사용 사례

1. 프로젝트 분석

Claude: "Análiza todos los proyectos activos y resume cuáles tienen más work packages abiertos"
→ El servidor lista proyectos, luego itera para contar paquetes abiertos

2. 작업 검색

Claude: "Busca todas las tareas sobre 'API' en estado 'In Progress' del proyecto BACKEND"
→ search_work_packages con query="API", status="In Progress", project_id="BACKEND"

3. 시간 보고서

Claude: "¿Cuántas horas registró Juan en la última semana?"
→ list_time_entries con user_id=juan, from_date=última_semana

4. 프로젝트 상태

Claude: "Dame un resumen del proyecto FRONTEND: qué se completó, qué está en progreso y qué sigue"
→ get_project + list_work_packages con diferentes status

5. 변경 감사

Claude: "¿Quién cambió el estado del work package #123 y cuándo?"
→ get_work_package_activities para ver el historial

🏗️ 아키텍처

src/
├── index.ts                 # Entry point del servidor MCP
├── client/
│   └── openproject.ts       # Cliente HTTP para OpenProject API
├── tools.ts                 # Registro e implementación de herramientas
├── schemas/
│   └── index.ts             # Validación Zod de inputs
└── utils/
    └── formatters.ts        # Formatos de salida Markdown

🔐 보안

  • ✅ Bearer 토큰 인증 (안전, 평문 자격 증명 불필요)

  • ✅ Zod를 사용한 입력 검증 (주입 방지)

  • ✅ 세분화된 오류 처리 (민감한 데이터 노출 방지)

  • ✅ TypeScript strict mode (타입 오류 방지)

  • ⚠️ 토큰은 .env에 저장됩니다 - 이 파일을 git에 커밋하지 마세요

🚨 문제 해결

"Authentication failed"

  • .env의 토큰이 유효한지 확인합니다.

  • OpenProject에서 새 토큰을 재생성합니다.

"Connection error"

  • OPENPROJECT_URL이 사용자 머신에서 접근 가능한지 확인합니다.

  • 프록시/VPN을 사용하는 경우 프록시 환경 변수를 설정합니다.

"No projects found"

  • 사용자에게 프로젝트를 볼 수 있는 권한이 있는지 확인합니다.

  • 인스턴스에 프로젝트가 존재하는지 확인합니다.

서버가 시작되지 않음

npm run build
npm run dev

터미널의 오류 출력을 확인합니다.

📈 향후 개선 사항

  • Claude에서 작업 패키지 생성/편집 지원

  • 작업 패키지 댓글 지원

  • Gantt 차트 통합

  • 실시간 알림을 위한 웹훅

  • 성능 향상을 위한 데이터 캐시

  • 종합 평가 (SEP)

📦 개발팀에 배포

각 개발자는 자체 사본 + 자체 API 토큰이 필요합니다 (여러 사람이 토큰을 공유하지 마세요 — 작업은 OpenProject에서 사용자별로 감사됩니다).

권장 옵션: 공유 Git 저장소

  1. 이 폴더를 비공개 저장소(GitHub 조직 또는 linux.ie의 Gitea/GitLab)에 업로드합니다. .env는 이미 .gitignore에 있으므로 절대 업로드되지 않습니다.

  2. 각 개발자:

    git clone <url-del-repo>
    cd openproject-mcp-server
    npm install
    npm run build
    cp .env.example .env
  3. 각자 자신의 토큰을 생성합니다 (Administration → API & Webhooks → Personal Access Tokens, 스토리를 생성할 경우 edit_work_packages 권한 포함) 및 자신의 .env에 붙여넣습니다.

  4. 각자 로컬 dist/index.js를 가리키도록 Claude Code(Settings → MCP Servers → Add Local Server)에 추가합니다.

Git 없는 대안: 압축 폴더

아직 저장소를 만들고 싶지 않다면 폴더의 .zip(node_modules, dist, .env 제외)을 공유하고 각 개발자가 로컬에서 npm install && npm run build를 실행하게 할 수 있습니다. 동일한 방식이며 배포 수단만 다릅니다 — 중앙 서버를 배포할 필요가 없으므로 CI/CD가 필요하지 않습니다: MCP는 각 개발자의 머신에서 stdio로 실행됩니다.

나중에 공유 원격 서버로 실행하는 경우

각 개발자가 로컬에서 실행하는 대신 모든 사람이 사용하는 단일 서버(예: linux.ie)를 선호한다면, 그때는 CI/CD(푸시마다 빌드 + 배포)가 적용되며 전송 방식을 stdio에서 HTTP로 마이그레이션해야 합니다. 이는 더 큰 아키텍처 전환입니다 — 이 방향을 원한다면 말씀해 주시고 별도로 계획하겠습니다.

🤝 기여

이것은 오픈 소스 MCP 서버입니다. 개선하려면:

  1. 저장소를 포크합니다.

  2. 기능을 위한 브랜치를 생성합니다 (git checkout -b feature/내-기능).

  3. 변경 사항을 커밋합니다 (git commit -am '내-기능 추가').

  4. 브랜치에 푸시합니다 (git push origin feature/내-기능).

  5. Pull Request를 엽니다.

📄 라이선스

MIT - 자유롭게 사용, 수정, 배포하세요.

💬 지원

버그 신고, 질문 또는 제안:


Integral de Empaques S.A.S.를 위해 ❤️로 제작됨

Available Tools

13 tools
create_work_packageA

Create a new work package (Epic, User Story, Task, Bug, etc.) in a project. Use list_project_types first to find the correct type_id, and pass parent_id to nest a User Story under an Epic.

NameRequiredDescriptionDefault
subjectYesTitle of the work package
type_idNoType ID (e.g. Epic, User Story, Task). Get it from list_project_types
due_dateNoDue date (YYYY-MM-DD)
parent_idNoParent work package ID (e.g. the Epic a User Story belongs to)
project_idYesProject ID or identifier where the work package will be created
start_dateNoStart date (YYYY-MM-DD)
assignee_idNoUser ID to assign
descriptionNoDescription / details (supports Markdown)
priority_idNoPriority ID

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, non-idempotent, non-destructive operation. The description adds context about creation scope and nesting but no additional behavioral detail like return value, permission needs, or side effects. It is consistent and adequate given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no unnecessary words. The primary action and scope are front-loaded, and the usage hints follow compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 9 parameters and no output schema, the description covers the key workflow and the two most nuanced parameters. It is solidly complete, though it does not describe the return value or confirmation behavior of the created work package.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds extra meaning for type_id (source it from list_project_types) and parent_id (nesting behavior), going beyond the schema's field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Create'), a clear resource ('new work package'), and the project context. It names the kind of objects handled (Epic, User Story, Task, Bug), and by saying 'a new' it implicitly distinguishes from the bulk sibling create_work_packages_bulk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear action-oriented guidance: use list_project_types first for type_id, and pass parent_id to nest a User Story under an Epic. It establishes context and prerequisites, though it does not explicitly mention when not to use this tool or point to the bulk alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_work_packages_bulkA

Create multiple work packages in one call (e.g. all the User Stories parsed from a Word document). Each item can have its own parent_id, so stories can attach to different Epics in the same call. Returns a per-item success/failure report.

NameRequiredDescriptionDefault
itemsYesWork packages to create (max 100 per call)
project_idYesProject ID or identifier where the work packages will be created

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only generic flags (readOnly=false, idempotent=false, etc.), so the description carries important behavioral weight. It discloses a per-item success/failure report, which is valuable for a bulk operation where partial failures are likely. It stops short of describing the report's exact shape or what happens on mixed success/failure, but the disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all useful: what the tool does, a concrete bulk-use example, a key parameter nuance, and the return behavior. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk creation tool with full schema coverage and no output schema, the description states the core behavior, the flexibility of parent_id, and the per-item report. It could be slightly richer about the shape of the per-item report or any ordering implications, but nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by explaining that each item can have its own parent_id, allowing stories to attach to different Epics in the same call. This goes beyond the schema's generic field description and guides parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Create multiple work packages in one call') and clarifies the bulk nature, distinguishing it from the singular create_work_package sibling. The example ('User Stories parsed from a Word document') further grounds what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete use case ('all the User Stories parsed from a Word document') and explains how items can attach to different Epics, making the bulk scenario clear. It does not explicitly mention the singular create_work_package alternative, but the 'one call' phrasing and sibling list make the intended usage obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectA
Read-onlyIdempotent

Get detailed information about a specific project

NameRequiredDescriptionDefault
project_idYesProject ID (numeric) or identifier (slug)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is clear. The description adds minimal behavioral context by promising 'detailed information', but it does not disclose response shape or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler and no duplication of schema content. It is front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool, the description plus annotations and schema are sufficient to invoke it correctly. The only real gap is that 'detailed information' is vague about the exact fields returned, but this does not hinder correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters and the project_id description already explains accepted formats (numeric ID or slug). The tool description adds no additional parameter semantics, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource pair: get detailed information about a specific project. The word 'specific' implicitly distinguishes it from list_projects, though no sibling is explicitly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool when you need details for a particular project using its ID or slug. There is no explicit when-to-use or when-not-to-use guidance, nor a reference to alternatives like list_projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_time_entryA
Read-onlyIdempotent

Get details of a specific time entry

NameRequiredDescriptionDefault
time_entry_idYesTime entry ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no extra behavioral context such as return format, error cases, or relation to other resources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to conveying the tool's core operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple, read-only getter with one required parameter and strong annotations. The description and schema together give enough context for an agent to invoke it correctly, though it does not describe the response shape or what fields 'details' includes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single required parameter time_entry_id is already documented. The description adds no additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb and resource: 'Get details of a specific time entry'. It distinguishes itself from list_time_entries by emphasizing a single, specific entry, though it does not explicitly name or contrast with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The wording implies this tool is for retrieving one specific time entry, especially in contrast to list_time_entries, but it provides no explicit guidance on when to choose it over alternatives or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_userA
Read-onlyIdempotent

Get detailed user information

NameRequiredDescriptionDefault
user_idYesUser ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already fully declare the safety profile (readOnly, idempotent, non-destructive). The description adds no behavioral context beyond that, such as return format, permissions, or scoping. With rich annotations, this is adequate but not additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clear sentence that is front-loaded and contains no filler. It states the action and resource efficiently, appropriate for a simple getter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only operation with strong annotations, the description is sufficient to orient an agent. It could have clarified what 'detailed' includes or whether any user can be fetched, but the simplicity of the tool makes that a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the only parameter (user_id). The description adds no extra semantic meaning about the parameter, maintaining the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get detailed user information' clearly identifies the verb and resource: it retrieves data about a single user. It is distinguishable from sibling list_users by the singular 'user' and 'detailed', though it does not explicitly state that it fetches by user_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and schema: use when you need details of a specific user by ID. However, no explicit guidance is given about when to choose this tool over list_users or other siblings, so the agent must infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_packageA
Read-onlyIdempotent

Get detailed information about a work package including description and links

NameRequiredDescriptionDefault
work_package_idYesWork package ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation as read-only, idempotent, non-destructive, and open-world. The description adds minor value by indicating the response includes description and links, but it does not discuss error behavior, pagination, or response shape beyond those hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the action and resource. Every word earns its place, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only get-by-id tool with strong annotations, the description is mostly complete. Since there is no output schema, mentioning 'description and links' gives some return-value context, though it does not enumerate the full set of returned fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single parameter, work_package_id, which is adequately described as 'Work package ID'. The tool description does not add additional semantic detail about the parameter beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get detailed information about a work package including description and links'. This distinguishes it from list/search variants by indicating detail-level retrieval of a single package, though it does not explicitly name sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this tool when you need detailed information about one specific work package. However, there is no explicit guidance about when to prefer list_work_packages, search_work_packages, or get_work_package_activities instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_work_package_activitiesA
Read-onlyIdempotent

Get activity history and updates for a work package

NameRequiredDescriptionDefault
offsetNoPagination offset
work_package_idYesWork package ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds that the result is a history of updates, which is useful return-shape context, but it does not disclose details like pagination behavior, ordering, or filtering beyond the offset parameter already in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the core purpose without filler or repetition. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two well-described parameters and no output schema, the description conveys the essential return concept. It is nearly complete, though it could add a bit more specificity about the shape or ordering of the returned activity entries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains work_package_id and offset. The description adds no additional parameter-level meaning, so it remains at the baseline for fully documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with a clear resource, 'activity history and updates' for a work package. This distinguishes it from sibling tools like get_work_package and list_work_packages, which return current details or lists rather than activity history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies clear context: use this tool when you need a work package's activity history or updates. It does not explicitly name alternatives or exclusion conditions, but the purpose is specific enough to guide selection among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsA
Read-onlyIdempotent

List all OpenProject projects with optional filtering by name and status

NameRequiredDescriptionDefault
offsetNoPagination offset (default: 0)
statusNoFilter by project status
name_filterNoFilter by project name (partial match, case-insensitive)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate the read-only, idempotent, non-destructive nature of the tool. The description adds the 'all projects with optional filtering' scope, which is useful, but it does not add further behavioral detail such as default pagination or result shape. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that states the action, resource, and filtering capability with no wasted words. The key scope ('List all projects') is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, zero required parameters, full schema description coverage, and strong read-only annotations, the definition is effectively complete for invoking the tool. It could mention pagination defaults or return format, but the schema already documents the offset parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters already have explicit descriptions. The tool description merely restates name/status filtering without adding new semantic details, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource ('OpenProject projects') and names the optional filters ('by name and status'). It is readily distinguished from sibling tools like get_project, list_work_packages, or list_project_types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Use is implied by the imperative description: call this tool when you want a list of projects rather than a single project or work packages. However, no alternatives are explicitly named and no when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_typesA
Read-onlyIdempotent

List the work package types available in a project (e.g. Epic, User Story, Task, Bug) with their IDs, needed before creating a work package of a specific type.

NameRequiredDescriptionDefault
project_idYesProject ID or identifier

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the operation is read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: it scopes results to the project and reveals that each type is returned with its ID and examples like Epic and Task, which is exactly the information an agent needs before creating work packages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence that front-loads the core action and result, then adds the use-case context with no filler. Every part of the sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list operation with one required parameter and rich annotations, the description covers what the tool does, what it returns, and why an agent would call it. No output schema is present, but the description supplies the key details needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter project_id already has a clear description. The description's "in a project" phrasing lightly reinforces the parameter's role but adds no new format, syntax, or default information, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ("List") and resource ("work package types available in a project"), gives examples of the returned values, and states that IDs are included. This makes it easy to distinguish from sibling tools like list_work_packages or list_projects, which operate on different entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "needed before creating a work package of a specific type" gives clear when-to-use context and ties it to create_work_package. It does not explicitly enumerate alternatives or exclusion conditions, so it stops short of a 5, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_time_entriesA
Read-onlyIdempotent

List time entries with filtering by project, user, work package, and date range

NameRequiredDescriptionDefault
offsetNoPagination offset
to_dateNoEnd date (YYYY-MM-DD)
user_idNoFilter by user ID
from_dateNoStart date (YYYY-MM-DD)
project_idNoFilter by project ID or identifier
work_package_idNoFilter by work package ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-onl, idempotent, and non-destructive behavior, so the description carries a lighter burden. It adds filtering scope but does not disclose behavior such as default result limits, pagination behavior, or what happens with no filters. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that states verb, object, and scope with zero waste. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple filtered-list tool with rich annotations and full schema coverage, but the lack of an output schema and any mention of default behavior or pagination leaves minor gaps. Still, an agent can select and invoke it correctly for common cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's filter categories roughly mirror the parameter list but add no new semantic detail beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (List) and resource (time entries), and lists the supported filter dimensions. It does not explicitly distinguish itself from get_time_entry, but the plural 'List' and filter scope make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool for querying lists of time entries with optional filters, but it provides no explicit when-to-use/when-not guidance or mention of alternatives. An agent must infer that get_time_entry is for single-record retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersA
Read-onlyIdempotent

List all users in the OpenProject instance

NameRequiredDescriptionDefault
offsetNoPagination offset

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the 'all users' scope, which is useful context, but does not disclose whether the response is paginated, what default page size is, or whether results are limited in any way. With strong annotations, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that states the action and scope with no filler. It front-loads the essential purpose and does not repeat annotation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list tool with full schema coverage and a safe annotation profile, the description is adequate. However, there is no mention of pagination behavior, default limits, or response format, and no output schema exists, so an agent may not know how many results to expect or how to iterate pages. Slight gap given the lack of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single parameter (offset) is already documented in the schema. The description does not add extra meaning about offset format, bounds, or interaction with pagination, but given the schema fully covers it, baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List all users in the OpenProject instance'. It is specific about scope (all users, instance-wide) and distinct enough from the sibling get_user (which fetches a single user) and list_projects (different resource). It lacks some detail on pagination, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when you need all users, and the sibling list includes get_user for retrieving a specific user, so an agent could infer when to choose this tool. However, it provides no explicit guidance on when to prefer list_users over get_user or other list tools, nor does it mention pagination behavior with offset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_work_packagesA
Read-onlyIdempotent

List work packages with advanced filtering (tasks, bugs, features, etc.)

NameRequiredDescriptionDefault
offsetNoPagination offset
searchNoFull-text search in subject and description
statusNoFilter by status (e.g., Open, In Progress, Closed)
priorityNoFilter by priority
project_idNoFilter by project ID or identifier
assignee_idNoFilter by assigned user ID

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds only the notion that work packages include tasks, bugs, features, etc., which is mild domain context. It does not describe pagination behavior beyond the schema or return characteristics, but the annotation coverage lowers the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence: 'List workpackages with advanced filtering (tasks, bugs, features, etc.).' It is front-loaded with the action and resource, and every word earns its place. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with 6 optional parameters, all fully documented in the schema, and no output schema or nested objects, the description plus schema are largely sufficient. The main gap is the lack of explicit guidance on when to use this tool vs. search_work_packages, but that does not make the definition incomplete for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter has a clear description (e.g., offset, search, status, priority, project_id, assignee_id). The tool description adds no new semantics beyond saying 'advanced filtering,' so it does not compensate with extra meaning. A baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List work packages with advanced filtering.' It identifies a specific verb and resource, and the mention of filtering distinguishes it from simple retrieval tools like get_work_package. However, it does not explicitly differentiate itself from the sibling search_work_packages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing and filtering work packages, and the parenthetical 'tasks, bugs, features, etc.' gives some context about the domain. It does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives like search_work_packages. The usage is clear enough by implication but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_work_packagesA
Read-onlyIdempotent

Search for work packages by text query with optional filters

NameRequiredDescriptionDefault
queryYesSearch query (searches subject and description)
offsetNoPagination offset
statusNoFilter results by status
priorityNoFilter results by priority
project_idNoLimit search to a specific project

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no behavioral detail beyond basic search semantics, such as open-world result completeness or pagination behavior, but it is consistent with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence conveys the tool's core behavior with no redundant words. It is appropriately sized for a simple search tool whose parameter details live in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full parameter descriptions, a read-only/idempotent annotation set, and a simple search purpose, the definition provides enough context for correct invocation. It could be stronger by mentioning pagination or pointing to list_work_packages for unfiltered browsing, but those are not blocking gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All five parameters are fully described in the input schema (100% coverage), so the schema carries the documentation burden. The description only adds a generic 'optional filters' phrase and no per-parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Search'), a resource ('work packages'), and the mechanism ('by text query with optional filters'). This clearly separates it from siblings like list_work_packages, which lists without a query, and get_work_package, which fetches a single item.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The wording implies use when a text query is available and when filtering is desired, but it does not explicitly say when to prefer search_work_packages over list_work_packages or get_work_package. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.0
    • First observedcreate_work_package
    • First observedcreate_work_packages_bulk
    • First observedget_project
    • First observedget_time_entry
    • First observedget_user
    • First observedget_work_package
    • First observedget_work_package_activities
    • First observedlist_project_types
    • First observedlist_projects
    • First observedlist_time_entries
    • First observedlist_users
    • First observedlist_work_packages
    • First observedsearch_work_packages

TDQS

A3.8/5.0

Scored across 13 tools

Disambiguation4/5

Each tool targets a distinct resource (projects, work packages, users, time entries, types), so the set is mostly unambiguous. However, list_work_packages and search_work_packages both retrieve work packages and could be confused if an agent is not careful about filtering versus text search.

Naming Consistency4/5

Tool names mostly follow a consistent list_/get_/create_/search_ + resource convention in snake_case. Minor deviations like create_work_packages_bulk and list_project_types are still readable and predictable.

Tool Count5/5

With 13 tools, the server is well-scoped for its purpose, covering projects, work packages, users, and time entries without unnecessary bloat. Each tool has a clear role in the overall surface.

Completeness3/5

Read coverage is strong across core resources and work-package creation is supported, including bulk creation. However, there are no update or delete operations for work packages, projects, users, or time entries, leaving notable lifecycle gaps for a project-management domain.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with OpenProject's API v3 for comprehensive project management operations including work packages, projects, time tracking, users, and all other OpenProject features through natural language.
    4
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables comprehensive management of OpenProject work packages, projects, comments, and relations through natural language. Supports creating, updating, and organizing tasks with assignees, watchers, hierarchies, and inter-task relationships.
    21
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with OpenProject installations for comprehensive project management, including creating projects and work packages, managing users and assignments, creating dependencies, and generating Gantt charts through natural language commands.
    15
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to manage OpenProject work packages, projects, and time tracking. It provides comprehensive tools for creating, updating, and querying tasks and project metadata through the OpenProject API.
    11
    19 npm
    1
    MIT