Skip to main content
Glama

Atlassian Read-only MCP

Ein kleiner MCP-Server, der KI-Assistenten schreibgeschützten Zugriff auf Jira und Confluence Cloud gewährt. Der Schreibschutz wird auf zwei Ebenen umgesetzt:

  1. Die Atlassian-Tokens enthalten ausschließlich Lese-Scopes.

  2. Der Server implementiert ausschließlich GET-Anfragen, die auf einer Allowlist stehen.

Er stellt vier Tools bereit:

  • Ein Jira-Issue lesen

  • Jira mit JQL durchsuchen

  • Eine Confluence-Seite lesen

  • Confluence mit CQL durchsuchen

Es gibt kein generisches HTTP-Tool und keine Implementierung für POST, PUT, PATCH oder DELETE. Selbst wenn versehentlich umfangreichere Anmeldedaten bereitgestellt würden, hätten MCP-Clients weiterhin kein Tool zum Ändern von Jira- oder Confluence-Inhalten. Antworten sind in ihrer Größe begrenzt, vermutliche Geheimnisse werden geschwärzt, Confluence-Storage-HTML wird in Markdown konvertiert und optionale JMESPath-Projektionen können die zurückgegebenen Daten reduzieren.

Voraussetzungen

  • Node.js 20 oder neuer

  • Zugriff auf den konfigurierten Atlassian-Cloud-Tenant

  • Separate, bereichsbezogene (Scoped) API-Tokens für Jira und Confluence

  • Einen MCP-Client wie GitHub Copilot in VS Code

Related MCP server: MCP Atlassian Server

Installation

git clone https://github.com/AlexSchaap-TMMC/atlassian-readonly-mcp.git C:\Tools\atlassian-readonly
Set-Location C:\Tools\atlassian-readonly
npm install
npm test

API-Tokens erstellen

Öffnen Sie Atlassian API tokens und erstellen Sie zwei Tokens.

Jira-Token

read:jira-work

Dieser klassische Scope ist für den Abruf von Jira-Issues und die JQL-Suche allein verifiziert. Atlassian hat Jira-Tokens, die nur die entsprechenden granularen Scopes enthielten, mit 401 Unauthorized; scope does not match abgelehnt.

Confluence-Token

read:page:confluence
read:content-details:confluence
search:confluence

Diese granularen Scopes sind für die CQL-Suche und den vollständigen Seitenabruf verifiziert.

Scopes sind bei der Erstellung eines Tokens festgelegt. Jira und Confluence benötigen getrennte Tokens. Kopieren Sie jedes Token aus dem einmaligen Erstellungsdialog und legen Sie es nicht in Quelldateien, der MCP-Konfiguration, der Shell-Historie, Issues oder Chats ab.

Fügen Sie keine Schreib- oder Administrations-Scopes hinzu. Die eingeschränkten Tokens stellen sicher, dass Atlassian Schreibvorgänge unabhängig von der MCP-Implementierung ablehnt.

Anmeldedaten speichern

Aus dem Repository-Verzeichnis:

npm run configure -- jira
npm run configure -- confluence

Die verborgenen Eingabeaufforderungen speichern jedes Token getrennt im Windows Credential Manager, im System-Schlüsselbund von macOS oder im Linux-Secret-Service. Die E-Mail-Adresse des Atlassian-Kontos gehört in die MCP-Umgebung, nicht in den Speicher für Anmeldedaten.

GitHub Copilot in VS Code konfigurieren

Führen Sie MCP: Open User Configuration über die Befehlspalette aus:

{
  "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"
      }
    }
  }
}

Laden Sie VS Code neu, öffnen Sie Copilot Chat, wählen Sie Configure Tools und aktivieren Sie die vier Atlassian-Tools.

Beispielanfragen:

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 konfigurieren

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

Starten Sie die Copilot CLI neu, wenn Sie den Server hinzugefügt oder geändert haben.

Fehlerbehebung

Authentifizierung

Prüfen Sie Folgendes:

  • Die E-Mail-Adresse stimmt mit dem Atlassian-Konto überein, das die Tokens erstellt hat.

  • Das richtige Produkt-/Module ist in Zustell-Linien.

  • Das Token ist aktuell und das Konto kann auf den gewünschten Inhalt zugreifen.

  • Jira verwendet read:jira-work, nicht nur granulare Jira-Scopes.

  • Confluence besitzt alle drei oben genannten Scopes.

  • Der MCP-Host wurde nach dem Ersetzen eines Tokens neu gestartet.

Scoped Tokens müssen die Atlassian-Produktgateways verwenden:

https://api.atlassian.com/ex/jira/{cloudId}
https://api.atlassian.com/ex/confluence/{cloudId}

Dieser Server verwendet die feste Cloud-Mandanten-ID in src/atlassian.mjs.

Unternehmenszertifikate

TLS-Inspektionsprodukte wie Zscaler signieren HTTPS-Datenverkehr mit einer Unternehmens-Zertifizierungsstelle neu. Windows mag dieser Zertifizierungsstelle vertrauen, während Node.js seine eigenen, gebündelten Zertifizierungsstellen verwendet. Auf unterstützten Node.js-Versionen wird dies in der MCP-Umgebung gehalten:

NODE_OPTIONS=--use-system-ca

Exportieren Sie die nicht abgelaufene Unternehmens-CA bei Bedarf als Base-64-PEM und setzen Sie NODE_EXTRA_CA_CERTS auf ihren absoluten Pfad. Deaktivieren Sie niemals die TLS-Überprüfung. WL. Die Nutzung von WSL hat.

WSL hat einen separaten Linux-Vertrauensspeicher. Exportieren Sie die entsprechenden Unternehmens- und Zwischenzertifikate deinstallatrices, speichern Sie sie mit der Erweiterung ".crt", kopieren Sie sie nach .txt .crt Nach /usr/local/share/ca-certificates/, rufen Sie dann auf:

sudo update-ca-certificates

Starten Sie WSL neu, bit. größer:

curl, Docker, Node.js or another HTTPS-Clients erneut versuchen.

Letzte Admin-Lin:

WSL und Systeme ohne grafische Benutzeroberfläche

Wenn Ihnen ein Desktop-Keyring (Schlüsselbund) wird, von eingesetzten Systemen aus:

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 token

Konfigurieren Sie diese Variablen in der MCP-Umgebung:

ATLASSIAN_USER_EMAIL
ATLASSIAN_JIRA_TOKEN_FILE
ATLASSIAN_CONFLUENCE_TOKEN_FILE

ATLASSIAN_JIRA_API_TOKEN und ATLASSIAN_CONFLUENCE_API_TOKEN unterstützt für CI-Einsatz, prozessspezifische. Diese sollten Sie nicht in der Desktop-Konfiguration speichern.

Anmeldedaten rotieren oder entfernen

Ersetzen Sie gespeicherte Anmeldedaten:

npm run configure -- jira
npm run configure -- confluence

Löschen Sie gespeicherte Anmeldedaten:

npm run configure -- jira delete
npm run configure -- confluence delete

Lokales Löschen macht ein Token nicht ungültig. führen Sie den Widerruf separat über Atlassians Token-Verwaltungsseite durch.

Sicherheitsgrenze

Dieses Projekt nutzt Sicherheit in Tiefe:

  • Token-Durchsetzung: Die dokumentierten Tokens erhalten Atlassian lesen Scopes, sodass Atlassian keine Schreibvorgänge autorisiert.

  • Umsetzungsstärkung: Es werden nur vier enge Lesetools verfügbar gemacht. URLs und HTTP-Methode sind fix; Aufrufer können keinen anderen Host, Endpunkt oder keine andere Methode wählen.

  • Antwortkontrolle: Antworten sind größenbegrenzt, vermutliche Geheimnisse werden ausgeblendet und Projektionen können die anfälligen Dateneduzieren.

Tokens erben dennoch die Sicht des angemeldeten Benutzers: Das MCP kann nur Inhalte lesen, die das Konto bereits sehen kann. Ein bereitgestellter breiterer Token schwächt die Token-Ebene, ergänzt aber keinen Schreibvorgang an die Anwendung.

Lizenz

MIT

Available Tools

4 tools
confluence_get_pageA

Read a Confluence page by ID and convert storage HTML to Markdown. This server has no write operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYes
projectionNoOptional JMESPath projection to reduce returned fields.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

jira_get_issueA

Read one Jira issue. This server has no write operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYes
projectionNoOptional JMESPath projection to reduce returned fields.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jqlYes
limitNo
projectionNoOptional JMESPath projection to reduce returned fields.

TDQS

B3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 4 tool updatesv0.1.0
    • First observedconfluence_get_page
    • First observedconfluence_search
    • First observedjira_get_issue
    • First observedjira_search_issues

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers