Skip to main content
Glama
MikeAtPinnacle

jira-worklog-mcp

jira-worklog-mcp

A small local MCP server for Jira Cloud worklogs — the piece the Atlassian MCP doesn't cover. Pairs with toggl-mcp to push tracked time into Jira at the end of the day.

Tool

What it does

add_worklog

Log work on an issue (POST /issue/{key}/worklog).

list_worklogs

List an issue's worklogs (verify / check for duplicates).

whoami

Confirm the configured credentials.

The Jira quirks are baked in: Basic-auth, the started format yyyy-MM-dd'T'HH:mm:ss.SSSZ (offset without a colon, no bare Z), and ADF-wrapped comments.

Prerequisites

Related MCP server: AtlassianJira MCP Integration Server

Build

git clone https://github.com/MikeAtPinnacle/jira-worklog-mcp.git
cd jira-worklog-mcp
npm install
npm run build

Compiles to dist/index.js — note its absolute path for the config below.

Configuration

The server reads three env vars (provide them via the MCP client's env block):

Var

Example

JIRA_BASE_URL

https://your-site.atlassian.net

JIRA_EMAIL

you@example.com

JIRA_API_TOKEN

(from the link above)

Auth is HTTP Basic base64(email:api_token) — the server does that for you.

Register with Claude Code

claude mcp add jira-worklog --scope user \
  --env JIRA_BASE_URL=https://your-site.atlassian.net \
  --env JIRA_EMAIL=you@example.com \
  --env JIRA_API_TOKEN=<your_jira_api_token> \
  -- node /absolute/path/to/jira-worklog-mcp/dist/index.js

Register with Claude Desktop

Edit the Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json on Windows; ~/Library/Application Support/Claude/... on macOS; ~/.config/Claude/... on Linux):

{
  "mcpServers": {
    "jira-worklog": {
      "command": "node",
      "args": ["/absolute/path/to/jira-worklog-mcp/dist/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://your-site.atlassian.net",
        "JIRA_EMAIL": "you@example.com",
        "JIRA_API_TOKEN": "<your_jira_api_token>"
      }
    }
  }
}

Tool inputs

add_worklogstarted defaults to now; Jira records at minute granularity (min 60s).

{ "issue_key": "LEGLINK-142", "time_spent_seconds": 5400, "started": "2026-06-26T13:00:00Z", "comment": "Code review" }

list_worklogs

{ "issue_key": "LEGLINK-142" }

whoami — no arguments.

End-of-day flow (with toggl-mcp)

Claude orchestrates the two servers:

  1. toggl-mcplist_time_entries { start_date, end_date, exclude_tag: "jira-logged" } — each entry has task_name (the Jira key), start, duration; skip running timers.

  2. jira-worklog-mcpadd_worklog { issue_key: task_name, time_spent_seconds: duration, started: start, comment: description } per entry.

  3. toggl-mcptag_time_entry { time_entry_id, tags: ["jira-logged"] } so the entry isn't logged again.

Because step 1 excludes jira-logged, the whole flow is safe to re-run.

Smoke test

export JIRA_BASE_URL="https://your-site.atlassian.net"   # PowerShell: $env:JIRA_BASE_URL="..."
export JIRA_EMAIL="you@example.com"
export JIRA_API_TOKEN="<your_jira_api_token>"
npm run build && npm run smoke

A self-cleaning end-to-end worklog test (writes to a real issue, then deletes it — use a throwaway ticket):

npm run worklogtest -- TEST-123

Notes

  • stdio server: logs go to stderr only; stdout is reserved for the MCP protocol.

  • Rate limits: 429/5xx are retried with backoff (honoring Retry-After).

  • Dedupe is handled on the Toggl side via the jira-logged tag; list_worklogs is available if you also want to check the Jira side.

Available Tools

3 tools
add_worklogAdd a Jira worklogA

Log work against a Jira issue (POST worklog). issue_key is the ticket (e.g. LEGLINK-142), time_spent_seconds is the duration, started defaults to now (RFC3339; normalized to Jira's required format), and comment is optional. Jira records time at minute granularity (minimum 60s).

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNoOptional worklog comment (plain text; stored as ADF).
startedNoWhen the work started, RFC3339. Default: now.
issue_keyYesJira issue key, e.g. LEGLINK-142.
time_spent_secondsYesWorklog duration in seconds.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate mutation (readOnlyHint=false, destructiveHint=false). The description adds behavioral details: Jira's minute granularity (minimum 60s), default for 'started', and normalization to Jira format, which go beyond 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?

Three concise sentences with front-loaded purpose. Every sentence adds value without 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?

The description is thorough for a simple mutation tool, but lacks information about return value or confirmation (no output schema). However, annotations and schema cover safety and parameters well.

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

Parameters5/5

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

Schema coverage is 100%, and the description enriches parameter meaning: explains issue_key format, time_spent_seconds as duration, started default and normalization, comment as optional. Adds constraints (minimum 60s) not in schema.

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 clearly states the action (log work via POST) and resource (Jira issue), with specific parameter examples. It is distinct from sibling tools 'list_worklogs' (read) and 'whoami' (user info).

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 provides clear context for use (logging work on an issue), but does not explicitly mention when not to use it or suggest alternatives, leaving some gap in guidance.

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

list_worklogsList worklogs on an issueA
Read-only

List the worklogs on a Jira issue (id, author, time, started, comment). Useful to verify what was logged or to check for duplicates before adding more.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_keyYesJira issue key, e.g. LEGLINK-142.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the tool is known safe and possibly incomplete. The description adds value by listing the specific fields returned (id, author, time, started, comment), which is not in annotations. No contradictions.

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 sentences with no extra words. The first sentence states the action and output, the second provides usage context. It is front-loaded and efficient.

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?

Given the tool's simplicity (one required string parameter, read-only list operation), the description covers purpose, output fields, and usage guidance. Annotations cover safety and open-world behavior. No output schema is needed as fields are listed. Complete for the context.

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 sole parameter 'issue_key' is fully described in the input schema (100% coverage), so the description does not need to add meaning. The tool description does not elaborate on the parameter beyond the schema, but baseline 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 clearly states it lists worklogs on a Jira issue and enumerates the fields returned (id, author, time, started, comment). The verb 'list' and resource 'worklogs on a Jira issue' are specific. The description also distinguishes from the sibling 'add_worklog' by implying usage for verification before adding.

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 explicitly says 'Useful to verify what was logged or to check for duplicates before adding more,' providing clear context for when to use this tool. It implies a read-only nature and suggests using it before 'add_worklog'. No explicit exclusions, but adequate given the simple tool set.

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

whoamiVerify Jira authA
Read-only

Return the authenticated Jira user (display name, accountId, email). Use to confirm credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating a safe, unrestricted read operation. The description adds value by specifying the returned fields (display name, accountId, email), going beyond 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?

The description is extremely concise (two sentences) and front-loaded: first sentence explains what the tool returns, second states its usage. No extraneous words.

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?

Given no parameters, no output schema, and clear annotations, the description fully covers the tool's behavior. It explains the return value (listing three fields) and the use case (credential confirmation). Everything needed for agent selection and invocation is present.

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?

The tool has no parameters, and schema description coverage is 100% (trivially). Per guidelines, baseline is 4. No additional parameter information is needed, and the description does not add anything about parameters, which is acceptable.

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 clearly states the tool returns the authenticated Jira user's display name, accountId, and email. The verb 'Return' is specific, and the resource 'authenticated Jira user' is distinct from sibling tools (add_worklog, list_worklogs), which deal with worklogs.

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 explicitly says 'Use to confirm credentials,' providing a clear usage context. However, it does not mention when not to use the tool or explicitly compare to alternatives, though siblings are clearly different in purpose.

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.

  1. 3 tool updatesv0.1.0
    • First observedadd_worklog
    • First observedlist_worklogs
    • First observedwhoami

TDQS

A4.4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: adding a worklog, listing worklogs, and getting user info. There is no overlap or confusion between them.

Naming Consistency4/5

Most tools follow verb_noun pattern (add_worklog, list_worklogs), but whoami breaks the pattern. Naming is mostly consistent with minor deviation.

Tool Count5/5

Three tools is appropriate for a focused worklog management server. Each tool provides essential functionality without excess.

Completeness3/5

Covers basic add and list operations but lacks update and delete worklog functionality. The whoami tool is auxiliary. The surface is somewhat incomplete for full worklog lifecycle management.

Maintenance

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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/MikeAtPinnacle/jira-worklog-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server