OpenProject MCP Server
OpenProject MCP Server
ClaudeをOpenProjectインスタンスに接続するための高品質な**Model Context Protocol (MCP)**サーバーです。Claudeが会話から直接、プロジェクト、ワークパッケージ、ユーザー、タイムエントリーを照会・検索・管理できるようにします。
🚀 特徴
✅ プロジェクトアクセス - プロジェクトの一覧表示、フィルタリング、詳細取得
✅ ワークパッケージ管理 - 高度なフィルタリングによるタスク、バグ、機能の表示
✅ 全文検索 - コンテンツによるワークパッケージの検索
✅ アクティビティ履歴 - ワークパッケージの変更とコメントの表示
✅ ユーザー管理 - ユーザーの一覧表示と情報取得
✅ タイムエントリー - プロジェクト、ユーザー、期間ごとの登録時間の照会
✅ スマートページネーション - 大規模データセットのサポート
✅ 堅牢なエラーハンドリング - 明確で実用的なメッセージ
✅ 完全な型付け - 最大限の型安全性を実現するTypeScript
Related MCP server: OpenProject MCP Server
📋 前提条件
Node.js 18+ または Bun 1.0+
APIアクセスが可能なOpenProject 13+ インスタンス
OpenProjectのAPIトークン(設定で生成可能)
🔧 インストール
1. サーバーをクローンまたはダウンロード
cd openproject-mcp-server2. 依存関係をインストール
npm install
# o con bun
bun install3. 環境変数の設定
.env.example を .env にコピーして値を入力します:
cp .env.example .env.env を編集します:
OPENPROJECT_URL=https://openproject.empresa.com
OPENPROJECT_API_TOKEN=tu-token-api-aqui
OPENPROJECT_PAGE_SIZE=50OpenProjectでAPIトークンを生成する方法:
OpenProjectで Administration → API & Webhooks → Personal Access Tokens に移動します
"+ New Personal Access Token" をクリックします
わかりやすい名前を付けます(例:「Claude MCP」)
必要な権限をチェックします:
✅
view_work_packages✅
view_projects✅
view_users✅
view_time_entries✅
edit_work_packages(作成・編集する場合)
生成されたトークンを
.envにコピーします
4. サーバーをコンパイル
npm run build🎯 使用方法
オプションA: Claude Codeで使用
Claude Codeを開きます
Settings → MCP Servers に移動します
+ Add Local Server をクリックします
設定します:
Name:
openprojectCommand:
nodeArguments:
["path/to/openproject-mcp-server/dist/index.js"]Environment Variables:
.envの値
保存してClaudeに再接続します
オプションB: テスト用にローカルで実行
npm run dev次に、別のターミナルでMCP Inspectorを使用します:
npm run inspectこれにより、各ツールをテストできるWebインターフェースが開きます。
オプションC: Claude.aiで
claude.ai/code を開きます
Settings → MCP Servers に移動します
このサーバーをアクセス可能なホストにデプロイした場合は、リモートサーバーを追加します
アクセス資格情報を設定します
🛠️ 利用可能なツール
📦 プロジェクト
list_projects
オプションのフィルタリングで全プロジェクトを一覧表示します。
パラメータ:
offset(number, optional): ページネーション用name_filter(string, optional): 名前でフィルタリングstatus(enum: "active" | "archived", optional): ステータスでフィルタリング
例:
Claude: List all active projects
→ OpenProject: Muestra proyectos activosget_project
プロジェクトの完全な詳細を取得します。
パラメータ:
project_id(string | number): プロジェクトのIDまたは識別子
📋 ワークパッケージ(タスク)
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で取得したタイプのIDparent_id(number, optional): 親エピックのIDpriority_id、assignee_id、start_date、due_date(optional)
create_work_packages_bulk
複数のワークパッケージを1回の呼び出しで作成します(Wordから抽出したすべてのユーザーストーリーをアップロードするのに最適です)。各アイテムは独自の parent_id を持つことができるため、異なるエピックのストーリーを同じ呼び出しで作成できます。アイテムごとにレポート(成功/エラー)を返し、1つが失敗してもバッチ全体を中止しません。
パラメータ:
project_id(string | number)items(array, 最大100): 各アイテムはcreate_work_packageと同じフィールド(project_idを除く)を持ちます
📋 フロー: Wordからエピックとユーザーストーリーをアップロード
チームの典型的なユースケース:.docx で作成されたユーザーストーリーがあり、エピック → ストーリーの関係を維持しながらOpenProjectにアップロードする必要があります。
個人用APIトークンを生成(各開発者が自分のものを使います。上記参照)し、ローカルの
.envを設定します。Claudeとの会話を開き、エピック/ストーリーを含む
.docxファイルを添付または参照します(Claudeは直接読むことができます)。Claudeに依頼します:「このWordを読んで、エピックとそのユーザーストーリーを特定し、OpenProjectのプロジェクトXにアップロードして」。
Claudeは通常、手動でオーケストレーションしなくても次のことを行います:
プロジェクトに対して
list_project_typesを実行し、EpicとUser Storyのtype_idを確認します。各エピックに対して
create_work_packageを実行します(数が少ないため、IDを取得するために1つずつ実行します)。ユーザーストーリーに対して
create_work_packages_bulkを実行し、各ストーリーに対応するエピックのparent_idを使用します。
最終レポート(何が作成され、何が失敗したか)を確認し、必要に応じて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 abiertos2. タスク検索
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_semana4. プロジェクトの状態
Claude: "Dame un resumen del proyecto FRONTEND: qué se completó, qué está en progreso y qué sigue"
→ get_project + list_work_packages con diferentes status5. 変更の監査
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 Token認証(安全で、平文の資格情報を必要としません)
✅ 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からのワークパッケージ作成・編集のサポート
ワークパッケージへのコメントのサポート
ガントチャートとの統合
リアルタイム通知のためのWebhooks
パフォーマンス向上のためのデータキャッシュ
総合的な評価(SEP)
📦 開発チームへの配布
各開発者には自分のコピー + 自分のAPIトークンが必要です(複数人でトークンを共有しないでください — OpenProjectではアクションがユーザーごとに監査されます)。
推奨オプション: 共有Gitリポジトリ
このフォルダをプライベートリポジトリ(GitHub orgまたは
linux.ieのGitea/GitLab)にアップロードします。.envはすでに.gitignoreに含まれていることを忘れないでください — 決してアップロードされません。各開発者:
git clone <url-del-repo> cd openproject-mcp-server npm install npm run build cp .env.example .env各開発者が自分のトークンを生成し(Administration → API & Webhooks → Personal Access Tokens、ストーリーを作成する場合は
edit_work_packages権限付き)、自分の.envに貼り付けます。各開発者がClaude Code(Settings → MCP Servers → Add Local Server)でローカルの
dist/index.jsを指定して追加します。
Gitを使わない代替案: 圧縮フォルダ
まだリポジトリを構築したくない場合は、フォルダの .zip(node_modules、dist、.env を除く)を共有し、各開発者がローカルで npm install && npm run build を実行できます。仕組みは同じで、配布手段が変わるだけです — デプロイする中央サーバーがないためCI/CDは不要です:MCPは各開発者のマシンで stdio 上で実行されます。
後で共有リモートサーバーとして実行する場合
各開発者がローカルで実行する代わりに、全員が利用する単一のサーバー(例:linux.ie)を希望する場合は、CI/CD(プッシュごとのビルド+デプロイ)が適用され、トランスポートを stdio からHTTPに移行する必要があります。これは大きなアーキテクチャの変更です — その方針を希望する場合はお知らせください。別途計画します。
🤝 コントリビューション
これはオープンソースのMCPサーバーです。改善するには:
リポジトリをフォークします
機能用のブランチを作成します(
git checkout -b feature/mi-feature)変更をコミットします(
git commit -am 'Agrego mi-feature')ブランチにプッシュします(
git push origin feature/mi-feature)プルリクエストを開きます
📄 ライセンス
MIT - 自由に使用、変更、配布できます
💬 サポート
バグの報告、質問、提案は:
リポジトリでissueを開く
MCPドキュメント を参照
Integral de Empaques S.A.S.のために❤️を込めて作成
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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.4MIT
- FlicenseAqualityDmaintenanceEnables 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
- FlicenseNot gradedqualityDmaintenanceEnables 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.14
- AlicenseBqualityDmaintenanceEnables 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.11151MIT
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/devsergioherrera/openproject-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server