atlassian-readonly
Atlassian Read-only MCP
Jira と Confluence Cloud への読み取り専用アクセスを AI アシスタントに提供する、小規模な MCP サーバーです。読み取り専用アクセスは、次の 2 つのレイヤーで強制されます。
Atlassian のトークンには読み取りスコープのみが含まれます。
サーバーは許可リストに登録された GET リクエストのみを実装します。
公開されるツールは次の 4 つです。
Jira の課題を読む
JQL で Jira を検索する
Confluence のページを読む
CQL で Confluence を検索する
汎用の HTTP ツールはなく、POST、PUT、PATCH、DELETE の実装もありません。万一、より広い権限の資格情報が誤って指定された場合でも、MCP クライアントには Jira や Confluence のコンテンツを変更するツールがありません。レスポンスはサイズが制限され、機密情報の可能性がある値は伏せられ、Confluence のストレージ HTML は Markdown に変換され、任意の JMESPath プロジェクションで返却データを削減できます。
要件
Node.js 20 以降
設定済みの Atlassian Cloud テナントへのアクセス
Jira 用と Confluence 用の、分離されたスコープ付き API トークン
VS Code の GitHub Copilot などの MCP クライアント
Related MCP server: MCP Atlassian Server
インストール
git clone https://github.com/AlexSchaap-TMMC/atlassian-readonly-mcp.git C:\Tools\atlassian-readonly
Set-Location C:\Tools\atlassian-readonly
npm install
npm testAPI トークンを作成する
Atlassian API tokens を開き、2 つのトークンを作成します。
Jira トークン
read:jira-workこのクラシックスコープのみで、課題の取得と JQL 検索が検証されています。Atlassian は、同等の細粒度スコープのみを含む Jira トークンを、401 Unauthorized; scope does not match で拒否しました。
Confluence トークン
read:page:confluence
read:content-details:confluence
search:confluenceこれらの細粒度スコープは、CQL 検索とページ全体の取得で検証されています。
スコープはトークン作成時に固定されます。Jira と Confluence には別々のトークンが必要です。各トークンは一度きりの作成ダイアログからコピーし、ソースファイル、MCP 設定、シェルの履歴、課題、チャットには置かないでください。
書き込みスコープや管理スコープは追加しないでください。制限されたトークンにより、MCP 実装とは独立に、Atlassian が書き込み操作を拒否することが保証されます。
資格情報を保存する
リポジトリのディレクトリから:
npm run configure -- jira
npm run configure -- confluence非表示のプロンプトは、各トークンを Windows Credential Manager、macOS Keychain、または Linux Secret Service に個別に保存します。Atlassian アカウントのメールは、資格情報ストアではなく MCP 環境に入れます。
VS Code で GitHub Copilot を設定する
コマンドパレットから MCP: Open User Configuration を実行します:
{
"servers": {
"atlassian-readonly": {
"type": "stdio",
"command": "node",
"args": ["C:\\Tools\\atlassian-readonly\\src\\server.mjs"],
"env": {
"ATLASSIAN_USER_EMAIL": "your.atlassian.email@example.com",
"NODE_OPTIONS": "--use-system-ca"
}
}
}
}VS Code を再読み込みし、Copilot Chat を開いて Configure Tools を選択し、4 つの Atlassian ツールを有効にします。
プロンプトの例:
Read HEC-123 and summarize its acceptance criteria.
Search Jira for open bugs assigned to me.
Search Confluence for pages about Kafka retry handling.GitHub Copilot CLI を設定する
copilot mcp add atlassian-readonly `
--env ATLASSIAN_USER_EMAIL="your.atlassian.email@example.com" `
--env NODE_OPTIONS="--use-system-ca" `
-- node C:\Tools\atlassian-readonly\src\server.mjsサーバーを追加または変更した後は、Copilot CLI を再起動します。
トラブルシューティング
認証
以下を確認してください:
メールアドレスが、トークンを作成した Atlassian アカウントと一致していること。
正しいプロダクトのトークンが保存されていること。
トークンが最新であり、そのアカウントが要求されたコンテンツにアクセスできること。
Jira が、細粒度の Jira スコープだけでなく
read:jira-workに一致していること。Confluence に上記の 3 つのスコープがすべて含まれていること。
トークンを置き換えた後に MCP ホストが再起動されていること。
スコープ付きトークンは、Atlassian のプロダクトゲートウェイを使用する必要があります:
https://api.atlassian.com/ex/jira/{cloudId}
https://api.atlassian.com/ex/confluence/{cloudId}このサーバーは、src/atlassian.mjs の固定テナント Cloud ID を使用します。
企業証明書
Zscaler などの TLS 検査製品は、HTTPS トラフィックを企業の認証局で再署名します。Windows はその認証局を信頼する場合がありますが、Node.js はバンドルされた CA リストを使い続けます。対応する Node.js バージョンでは、これを MCP 環境に入れてください:
NODE_OPTIONS=--use-system-ca必要に応じて、期限切れでない企業 CA を Base-64 PEM としてエクスポートし、NODE_EXTRA_CA_CERTS にその絶対パスを設定します。TLS の検証を無効にしないでください。
WSL には、または Linux トラストストアがあります。該当する企業のルート証明書と中間証明書を Windows からエクスポートし、.crt 拡張子で保存し、/usr/local/share/ca-certificates/ にコピーしてから、次カーネル:
sudo update-ca-certificatescurl、Docker、Node.js、その他の HTTPS クライアントを再試行する前に、WSL を再起動します。
WSL とヘッドレスシステム
デスクトップのキーリングが利用できない場合は、制限されたトークンファイルを使用してください:
mkdir -p ~/.config
install -m 600 /dev/null ~/.config/atlassian-jira-token
install -m 600 /dev/null ~/.config/atlassian-confluence-token
read -rsp "Jira API token: " token; echo
printf '%s' "$token" > ~/.config/atlassian-jira-token
read -rsp "Confluence API token: " token; echo
printf '%s' "$token" > ~/.config/atlassian-confluence-token
unset tokenMCP 環境で、サンプルの変数にしてください:
ATLASSIAN_USER_EMAIL
ATLASSIAN_JIRA_TOKEN_FILE
ATLASSIAN_CONFLUENCE_TOKEN_FILEATLASS_JIRA_API_Token と ATLASS_CONFUENCE_API_TOOKEN ont、プロセススコープの CI 利用に対応していますが、デスクトップ設定に保存すべきではありません。
資格情報と回転・削除
保存したトークンを置き換えます:
npm run configure -- jira
npm run configure -- confluence保存したトークンを削除します:
npm run configure -- jira delete
npm run configure -- confluence deleteローる削除で、トークンは失効しません。Atlassian のトークン管理ページで、個に失効させてください。
セキュリティ境界
このプロジェクトは多層防御を採用しています。
トークンの強制: 文書化されたトークンには Atlassian の読取スコープのみが含まれるため、Atlassian は書キ込みを強制しません。
実装の強制: 公開されいるは、制限の4つの読み取りツールのみです。その URL と HTTP メソッドは固定され、呼び出し側が他にホスト、エンドポイント、メソッドを選択できません。
レスポンス制御: レスポンスはサイ追加制限され、機密情報の可能性があるものは伏せられ、プロジェクションで返却データを最小化できます。
トークンは、作成者の可視性を依然として継承します。つまり、MCP はそのアカウントがすでにアクセスできるコンテンツのみを読み取ります。トークンを広くするとトークンレイヤとしての保護は弱まりますが、このサーバーに書き込み操作が追加されることはありません。
ライセンス
Available Tools
4 toolsconfluence_get_pageA
Read a Confluence page by ID and convert storage HTML to Markdown. This server has no write operations.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | ||
| projection | No | Optional JMESPath projection to reduce returned fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses the conversion behavior (storage HTML to Markdown) and states the server has no write operations, which is helpful. However, it does not mention error handling, response format, or any limits, leaving gaps for an agent.
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?
Two sentences, no filler. The main purpose is front-loaded, and the read-only clarification is concise and useful. Every word 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?
For a simple read tool with only two parameters and no output schema, the description covers the core purpose and behavioral nuance. It does not explain return structure or error scenarios, but these are less critical given the tool's simplicity. Overall, it is sufficiently complete for an agent to call 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?
Schema coverage is 50%: projection has a description, but page_id does not. The description does not compensate for the missing page_id semantics beyond reiterating 'by ID'. It adds nothing about projection beyond the schema, so minimal value is provided for parameters.
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 a clear verb ('Read') and a specific resource ('Confluence page by ID'), plus a distinctive detail (conversion to Markdown). This distinguishes it from sibling tools like confluence_search and jira_get_issue without needing to inspect the schema.
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 clearly implies usage when a page ID is known, but it does not explicitly contrast with confluence_search or state when NOT to use this tool. The read-only note provides general context, but no alternative routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confluence_searchA
Search Confluence with CQL. Results are bounded; this server has no write operations.
| Name | Required | Description | Default |
|---|---|---|---|
| cql | Yes | ||
| limit | No | ||
| projection | No | Optional JMESPath projection to reduce returned fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It adds useful context by stating 'Results are bounded' and 'this server has no write operations,' which helps the agent understand output scaling and that the tool performs no mutations. It does not detail result shape or error behavior, but for a simple search tool this is reasonably transparent.
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 two sentences, front-loaded with the core purpose, and contains no filler. The safety note about no write operations is brief and earns its place given the lack of annotations.
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 three-parameter search tool, the description plus schema covers the basic calling contract, but there is no output schema and the description does not mention what the search returns, pagination behavior, or any example CQL. 'Results are bounded' hints at limits but leaves practical expectations underspecified.
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 only 33% because only projection has a description. The main description mentions CQL, which gives some meaning to the cql parameter, but it does not explain how to construct CQL, what limit controls beyond its schema constraints, or how projection interacts with results. The description does not sufficiently compensate for the low schema coverage.
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 a specific action and resource: 'Search Confluence with CQL.' This clearly separates it from sibling tools like jira_search_issues and confluence_get_page, since the resource (Confluence) and operation (search) are both explicit.
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 implies this tool should be used for searching Confluence, but it does not explicitly say when to choose it over siblings such as confluence_get_page or jira_search_issues. There is no when-not-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_get_issueA
Read one Jira issue. This server has no write operations.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_key | Yes | ||
| projection | No | Optional JMESPath projection to reduce returned fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does mention the read-only nature and that the server has no write operations, which is useful context. However, it does not describe error behavior, response format, or what happens when the issue does not exist.
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 two short sentences, both earning their place. It front-loads the core action and adds the server-wide write constraint without any redundant phrasing.
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 read tool, the inputs and general action are covered, but the absence of an output schema means the return value is only implied. The description does not clarify what fields are returned or how to interpret the response, leaving a moderate gap for the agent.
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 a pattern for issue_key and a description for projection, but the tool description itself adds no parameter-level explanation. With schema coverage at 50%, the description does not compensate for the undocumented issue_key semantics, though the parameter name is fairly self-explanatory.
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 a specific verb ('read') and resource ('one Jira issue'), making the tool's purpose unmistakable. It is clearly differentiated from sibling search and Confluence tools by focusing on a single issue retrieval.
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 implies usage when a specific issue key is available, but it does not explicitly mention jira_search_issues as the alternative for query-based retrieval. There is no warning against using it for searches or a clear when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jira_search_issuesB
Search Jira with JQL. Results and fields are bounded; this server has no write operations.
| Name | Required | Description | Default |
|---|---|---|---|
| jql | Yes | ||
| limit | No | ||
| projection | No | Optional JMESPath projection to reduce returned fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It adds two useful traits: 'Results and fields are bounded' and 'this server has no write operations', which are not present in the schema. However, it omits details like pagination, ordering, rate limits, or error behavior, so transparency is partial.
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, tight sentence that front-loads the core action and immediately adds a scope limitation. No filler words or redundant repetition of the tool name. Every phrase contributes meaning.
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 three parameters, no output schema, and no annotations, the description is not sufficient. It does not describe what a search result looks like, how to construct a valid JQL query, or the effect of 'limit' and 'projection'. The bounded/no-write note is useful but only addresses safety, not invocation.
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?
Only 33% of the parameters have schema descriptions (projection). The description clarifies that 'jql' is the Jira Query Language string, but it does not explain the 'limit' parameter or add syntax/format details. Since schema coverage is low, the description should compensate more but does not for two of the three parameters.
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 names a specific verb ('Search') and resource ('Jira'), and correctly implies searching issues via the tool name and JQL mention. It distinguishes from jira_get_issue (which fetches a single issue) and confluence_search (different product), though it does not explicitly say 'issues' or contrast these siblings.
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 explicit guidance on when to use this tool versus alternatives. The description does not mention jira_get_issue, confluence_search, or any condition that would select one over the other. The only usage hint is 'Search Jira with JQL', which is implied functionality rather than a directive.
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.
4 tool updates
v0.1.0- First observed
confluence_get_page - First observed
confluence_search - First observed
jira_get_issue - First observed
jira_search_issues
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: get versus search for both Jira and Confluence. There is no overlap or ambiguity between any pair, enabling precise tool selection.
All tool names follow a consistent product_action pattern with snake_case (e.g., jira_get_issue, confluence_search). The naming is uniform and predictable.
With 4 tools covering two products (Jira and Confluence) each having a get and search operation, the count is well-scoped for a read-only server. No tool feels redundant or missing.
The read-only surface provides essential get and search for both products. Minor gaps exist such as bulk fetch or additional metadata endpoints, but core querying needs are well covered.
Maintenance
Related MCP Connectors
Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
- OpenOakOAuthorg.openoak
Secure AI access to OpenOak tasks, notes, and Kanban boards.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Atlassian products (Confluence and Jira) through natural language, supporting both Cloud and Server/Data Center deployments. Allows searching, creating, and managing content across Jira issues and Confluence pages with flexible authentication options.Apache 2.0
- AlicenseAqualityDmaintenanceIntegrates with Atlassian Cloud products (Confluence and Jira) to enable AI assistants to search, read, create, and manage pages, issues, comments, attachments, and export content through natural language interactions.404,608 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to search, retrieve, and manage Confluence pages, and generate weekly status drafts from Jira activity.1-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to deeply introspect Jira Data Center configurations — including workflows, schemes, automation, and Assets — through 76 read-only tools, without any modification capability.5MIT