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.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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