jira-worklog-mcp
Allows logging work on Jira issues, listing worklogs, and verifying credentials via the Jira Cloud API.
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., "@jira-worklog-mcplog 1.5 hours to PROJECT-42 for code review"
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.
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 |
| Log work on an issue ( |
| List an issue's worklogs (verify / check for duplicates). |
| 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
Node.js 18+.
A Jira API token — create one at https://id.atlassian.com/manage-profile/security/api-tokens.
Your Atlassian account email and your Jira site URL (e.g.
https://your-site.atlassian.net).
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 buildCompiles 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 |
|
|
|
|
| (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.jsRegister 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_worklog — started 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:
toggl-mcp→list_time_entries { start_date, end_date, exclude_tag: "jira-logged" }— each entry hastask_name(the Jira key),start,duration; skip running timers.jira-worklog-mcp→add_worklog { issue_key: task_name, time_spent_seconds: duration, started: start, comment: description }per entry.toggl-mcp→tag_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 smokeA self-cleaning end-to-end worklog test (writes to a real issue, then deletes it — use a throwaway ticket):
npm run worklogtest -- TEST-123Notes
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-loggedtag;list_worklogsis available if you also want to check the Jira side.
Available Tools
3 toolsadd_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).
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional worklog comment (plain text; stored as ADF). | |
| started | No | When the work started, RFC3339. Default: now. | |
| issue_key | Yes | Jira issue key, e.g. LEGLINK-142. | |
| time_spent_seconds | Yes | Worklog duration in seconds. |
TDQS
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.
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.
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.
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.
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.
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 issueARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_key | Yes | Jira issue key, e.g. LEGLINK-142. |
TDQS
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.
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.
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.
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.
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.
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 authARead-only
Return the authenticated Jira user (display name, accountId, email). Use to confirm credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
add_worklog - First observed
list_worklogs - First observed
whoami
TDQS
Each tool serves a distinct purpose: adding a worklog, listing worklogs, and getting user info. There is no overlap or confusion between them.
Most tools follow verb_noun pattern (add_worklog, list_worklogs), but whoami breaks the pattern. Naming is mostly consistent with minor deviation.
Three tools is appropriate for a focused worklog management server. Each tool provides essential functionality without excess.
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
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
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Track time on usetimebook.com - start/stop timers, log entries, list projects/clients.
Track billable time from your AI chat: timers, entries, reports, CSV export. All data stays local.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables time tracking in Tempo with automatic timesheet generation from git commits, worklog management with roles and accounts, and integration with Jira for seamless project time logging.1-
- AlicenseNot gradedqualityDmaintenanceEnables Jira integration with dynamic configuration, time logging, task creation, issue updates, and bulk imports through natural language.MIT
- FlicenseNot gradedqualityDmaintenanceEnables logging time to Tempo (Jira time tracker) via natural language in Claude Desktop or OpenCode.-
- FlicenseNot gradedqualityDmaintenanceEnables Jira integration for comprehensive issue management, board operations, time tracking, and project management 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/MikeAtPinnacle/jira-worklog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server