openproject-local-mcp
Provides tools for interacting with OpenProject's API v3, enabling listing projects, searching, retrieving, and creating work packages, as well as adding comments, with read-only mode by default and optional write capabilities.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openproject-local-mcpshow my assigned work packages"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
openproject-local-mcp
OpenProject API v3をMCPツールとして公開するローカルSTDIOサーバーです。Codex CLIやGitHub Copilot CLIなどのMCPクライアントから、プロジェクトとWork Packageを参照できます。
方針
OpenProjectは直接クラウド側へ公開せず、開発者PC上のローカルMCPサーバーからAPI v3へ接続します。
APIトークンは専用ユーザーの最小権限トークンを使います。
初期状態では読み取り中心です。
create_work_packageとadd_work_package_commentはOPENPROJECT_ENABLE_WRITE=trueの場合だけ動きます。OpenProject固有の名称、HAL+JSON、フィルター形式をそのまま扱います。
Related MCP server: OpenProject MCP
機能
プロジェクト一覧
Work Packageの検索、詳細取得、自分の担当項目の取得
明示的に有効化した場合のみ、Work Package作成とコメント追加
Bearer認証(標準)とAPIトークンのBasic認証
セットアップ
npm install
npm run build.env.exampleを参考に、MCPクライアントから環境変数を渡してください。.envはローカル開発専用で、Gitへコミットしないでください。
OPENPROJECT_URL=https://openproject.example.local
OPENPROJECT_API_TOKEN=xxxxxxxxxxxxxxxx
OPENPROJECT_AUTH_MODE=bearer
OPENPROJECT_ENABLE_WRITE=falseOPENPROJECT_URLにはインスタンスのルートURLを指定します。/api/v3は付けません。現行OpenProjectではAPIトークンをBearerまたはBasic認証で利用できます。既定値はbearerです。
MCPクライアント設定
Codex CLI
[mcp_servers.openproject]
command = "node"
args = ["/path/to/openproject-local-mcp/dist/index.js"]
default_tools_approval_mode = "prompt"
[mcp_servers.openproject.env]
OPENPROJECT_URL = "https://openproject.example.local"
OPENPROJECT_API_TOKEN = "xxxxxxxxxxxxxxxx"
OPENPROJECT_AUTH_MODE = "bearer"
OPENPROJECT_ENABLE_WRITE = "false"GitHub Copilot CLI
copilot mcp add openproject \
--env OPENPROJECT_URL=https://openproject.example.local \
--env OPENPROJECT_API_TOKEN=xxxxxxxxxxxxxxxx \
--env OPENPROJECT_ENABLE_WRITE=false \
-- node /path/to/openproject-local-mcp/dist/index.js提供ツール
list_projects: APIユーザーから見えるプロジェクト一覧search_work_packages: 一般的な条件またはAPI v3のカスタムフィルターによる検索get_work_package: 数値IDによる詳細取得get_my_work_packages: APIユーザーに割り当てられたWork Packagecreate_work_package: Work Package作成(書き込みの明示許可が必要)add_work_package_comment: コメント追加(書き込みの明示許可が必要)
Agent Skill
OpenProject MCPの使い分けと書き込み時の確認ルールをagent-skills/openproject-workflows/SKILL.mdに同梱しています。利用するエージェント環境の個人用Skillsディレクトリへ手動でコピーしてください。SkillにはAPIトークンや実URLを含めないでください。
OpenProjectのoffsetは件数ではなく、1から始まるページ番号です。custom_filtersは次の形式で指定できます。
[
{
"name": "status",
"operator": "=",
"values": ["5"]
}
]書き込み系を有効にする
OPENPROJECT_ENABLE_WRITE=truecreate_work_packageでは、OpenProjectが作成時に必要とするproject_id、type_id、subjectを必須にしています。
{
"project_id": 3,
"type_id": 1,
"subject": "ログイン画面のエラーを確認する",
"description": "再現手順と期待結果を整理する。"
}コメント追加例:
{
"id": 1234,
"comment": "調査を開始しました。再現条件を確認中です。"
}開発
npm run typecheck
npm run build
npm testテストではHTTP通信をモックし、実OpenProjectには接続しません。
セキュリティ
APIトークンは専用ユーザーの最小権限トークンを利用してください。
.envや実URLを含むMCPクライアント設定をコミットしないでください。書き込みツールは
OPENPROJECT_ENABLE_WRITE=trueを明示した場合だけ有効です。OpenProjectのAPIがHTTPSで利用できる環境ではHTTPSを使用してください。
詳細は設計メモを参照してください。
OpenProject API仕様:
ライセンス
MIT License
Available Tools
6 toolsadd_work_package_commentAdd OpenProject Work Package CommentB
Add a comment to a work package. Requires OPENPROJECT_ENABLE_WRITE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| notify | No | ||
| comment | Yes | ||
| internal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It only mentions the write-enable prerequisite, which implies mutation, but it does not disclose side effects, whether notify controls email notifications, or how internal comments differ from public ones. This is insufficient for a mutation tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently states the action and the key prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain what the tool returns and how optional parameters behave. It only covers the core action and an environment variable, leaving behaviors like notification and internal visibility undocumented. Incomplete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides no explanation of the four parameters; only 'comment' is inferable from the description. 'notify' and 'internal' are left unexplained, and 'id' is only obvious from context. This is a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Add a comment to a work package.' This is a specific verb and resource, clearly distinguishing from sibling tools like create_work_package or get_work_package. The title reinforces the purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a prerequisite ('Requires OPENPROJECT_ENABLE_WRITE=true'), which is useful context. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention that comments are appended to an existing work package. The usage scenario is implied from the name but not clearly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_work_packageCreate OpenProject Work PackageB
Create a work package. Requires OPENPROJECT_ENABLE_WRITE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| notify | No | ||
| subject | Yes | ||
| type_id | Yes | ||
| due_date | No | ||
| parent_id | No | ||
| status_id | No | ||
| project_id | Yes | ||
| start_date | No | ||
| assignee_id | No | ||
| description | No | ||
| priority_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the write requirement and the create action, which implies mutation. However, it does not mention side effects, permissions beyond the env var, or the response format, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that state the purpose and the key prerequisite. It is front-loaded and contains no filler, earning a perfect score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, no annotations, no output schema, and no parameter descriptions, the description is severely incomplete. It provides no context about required fields, meaning of type_id/project_id, or what a work package entails, making it inadequate for an AI agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no information about any of the 11 parameters, and the schema provides no descriptions (0% coverage). Parameter names like type_id and status_id are ambiguous without explanation, and the description does not compensate by listing required fields or offering guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a work package' clearly states the action (create) and the resource (work package), and the title explicitly mentions OpenProject. This distinguishes it from sibling tools like get_work_package and search_work_packages, which are read/search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear prerequisite ('Requires OPENPROJECT_ENABLE_WRITE=true') but does not explicitly explain when to choose this tool over alternatives. The purpose of creation is implied, but no explicit comparison to siblings like add_work_package_comment is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_work_packagesGet My OpenProject Work PackagesC
Get work packages assigned to the configured OpenProject API user.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| status | No | open | |
| sort_by | No | ||
| page_size | No | ||
| project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the scope (assigned to user). It does not mention pagination, filtering by status, sorting, or return format, which the parameters imply are configurable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no redundant words. It is front-loaded with the core purpose and efficiently uses the available space without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 optional parameters, no output schema, and no annotations, the description is far too sparse to be considered complete. It lacks details on default behavior, result shape, and how parameters affect the outcome, leaving critical gaps for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero descriptions for the 5 parameters, and the tool description does not compensate by explaining any of them. An agent cannot infer what 'offset', 'status', 'sort_by', 'page_size', or 'project_id' control, making parameter semantics completely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves work packages assigned to the configured OpenProject API user, using a specific verb ('Get') and resource ('work packages'). The phrase 'assigned to the configured OpenProject API user' distinguishes it from siblings like search_work_packages or get_work_package.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as search_work_packages or get_work_package. The description only states the basic function without any contextual cues, exclusions, or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_work_packageGet OpenProject Work PackageB
Get a single OpenProject work package by numeric id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description adds no behavioral details beyond the basic read operation. It does not mention what happens if the id is not found, the return format, or any potential errors, leaving the agent with only the inferred read-only nature of 'get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, directly front-loaded with the action and resource. It contains no filler or redundant phrasing, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with one parameter and no output schema, the description gives the core retrieval action. However, it lacks any mention of the return structure or how this tool relates to search/list alternatives, making it minimally viable but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes id as an integer with exclusiveMinimum 0, and the description merely says 'numeric id', which is redundant. With 0% schema description coverage, the description fails to add meaningful context about the id parameter, such as what constitutes a valid work package id or where to find it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single work package by numeric id. The verb 'Get' plus resource 'single work package' and scope 'by numeric id' unambiguously distinguishes it from siblings like list_work_packages or 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through 'single' and 'by numeric id', suggesting use when you have a specific work package ID. However, there is no explicit guidance on when to use this tool versus search_work_packages or get_my_work_packages, leaving the agent to infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList OpenProject ProjectsC
List projects visible to the configured OpenProject API user.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| sort_by | No | ||
| page_size | No | ||
| custom_filters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It mentions the visibility scope but omits details about pagination, filtering, return format, or side effects, which are important for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of ten words, highly front-loaded with 'List projects'. It is concise without unnecessary words and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and four underexplained parameters, this description leaves a substantial information gap. It lacks any mention of filtering, sorting, pagination, or expected response structure, making it inadequate for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not mention any parameter meanings. The four parameters (offset, sort_by, page_size, custom_filters) are completely unexplained, so the description adds no value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('projects'), with a specific scope ('visible to the configured OpenProject API user'). This distinguishes it from sibling tools that focus on work packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool vs alternatives or when not to use it. The description simply states the function without usage context, scoring low on this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_work_packagesSearch OpenProject Work PackagesC
Search work packages with common OpenProject API v3 filters.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| offset | No | ||
| status | No | ||
| sort_by | No | ||
| type_id | No | ||
| page_size | No | ||
| project_id | No | ||
| assignee_id | No | ||
| priority_id | No | ||
| custom_filters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only says 'search with filters.' It does not disclose pagination behavior, return format, read-only nature, or any filter semantics, so the agent gets minimal behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only one sentence with no redundancy, which is concise, but the sentence is too generic to convey meaningful information. It is under-specified rather than efficiently informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 optional parameters, no output schema, no annotations, and sibling tools that overlap in purpose, a one-sentence vague description is grossly inadequate. The agent cannot determine key behaviors, parameter requirements, or expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the 10 parameters. Parameter names like text, offset, status, and custom_filters are left entirely to inference, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the action ('search') and resource ('work packages') clearly, and the title reinforces this. It distinguishes from siblings like get_work_package and create_work_package, though the phrase 'common API v3 filters' is vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided for when to use this tool versus get_my_work_packages or get_work_package. There are no exclusions, alternatives, or context signals to help the agent choose correctly.
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. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
add_work_package_comment - First observed
create_work_package - First observed
get_my_work_packages - First observed
get_work_package - First observed
list_projects - First observed
search_work_packages
TDQS
Most tools are clearly distinct: list_projects vs work package tools, and create/comment are unique actions. However, get_my_work_packages could potentially overlap with search_work_packages using an assignee filter, creating slight ambiguity.
All tool names follow a consistent verb_noun pattern (list, get, search, create, add), with get_my_work_packages being the only slight deviation but still within the pattern. No mixed conventions or chaotic naming.
With 6 tools, the server is well-scoped for an OpenProject integration, covering both projects and work packages without excessive fragmentation. The count is squarely in the ideal range.
The toolset provides basic work package lifecycle (create, get, search) and commenting, but lacks update and delete operations for work packages. Project creation is also missing, leaving notable gaps for full domain coverage.
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 Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
An MCP server that provides access to Testiny projects, test cases and test runs
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA comprehensive MCP server for integrating with OpenProject API, enabling AI assistants to manage projects, work packages, time tracking, and users.23-
- AlicenseBqualityAmaintenanceAn MCP server that lets local AI agents read and manage OpenProject project data through structured, guarded tools, with write operations requiring explicit confirmation.5820MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI assistants to interact with OpenProject, listing projects and work packages and managing resources through natural language.-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude Desktop to your OpenProject instance, allowing you to manage projects, tasks, and time entries through natural language.-
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/NobuoTsukamoto/openproject-local-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server