worklog-mcp
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., "@worklog-mcpLog my work for this session: fixed auth bug, why I chose JWT, open loops."
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.
worklog-mcp
An MCP server that gives a coding agent somewhere to write down what it did and why.
Git already records what changed. What it doesn't record is the reasoning — why this approach over the alternative, what was tried and abandoned, what's still broken, which test run was green when the PR went up. That context lives in a chat transcript that nobody reads again.
This server gives the agent six tools to record it as it works. By default it appends JSONL to a file in your repo. Point it at an HTTP endpoint and it posts there instead.
// .mcp.json
{
"mcpServers": {
"worklog": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github:aadityakushwaha/worklog-mcp"]
}
}
}That's the whole setup. No account, no key, no server. Events land in
.worklog/events.jsonl.
Tools
Tool | When the agent calls it |
| finished something meaningful — the why and any open loops |
| made an architecturally consequential choice (ADR-style, with alternatives and consequences) |
| ran a suite — result and counts, not full logs |
| opened or merged a pull request |
| set a work item's status: |
| pushed a plan, spec, progress doc, runbook or research note as rendered markdown |
Every event carries a sessionId shared across one agent run and a unique id per
event. The agent never passes either — they're threaded automatically, so one run's
events can be grouped afterwards and a retried call can be de-duplicated by the
receiver.
Related MCP server: logbook-mcp
Configuration
Variable | Default | Meaning |
|
| Where to append when there's no receiver |
| — | If set, POST events here instead of writing a file |
| — | Bearer token. Required when |
Add .worklog/ to .gitignore unless you want the log committed. Some teams do —
it makes review of an agent's reasoning part of the PR.
Reading the log
It's JSONL, so the usual tools work:
# what got done, most recent first
jq -r 'select(.tool=="log_work") | "\(.at) \(.summary)"' .worklog/events.jsonl | tail -20
# every architectural decision, with its alternatives
jq 'select(.tool=="record_decision") | {title, decision, alternatives}' .worklog/events.jsonl
# anything still blocked
jq 'select(.tool=="update_progress" and .status=="blocked")' .worklog/events.jsonlSending somewhere else
Set WORKLOG_URL and every event is POSTed to <WORKLOG_URL>/api/agent/events with
Authorization: Bearer <WORKLOG_API_KEY>. The body is the event — tool, id,
sessionId when known, and the tool's own arguments:
{ "tool": "log_work", "id": "9f2c…", "sessionId": "7a10…", "summary": "…", "intent": "…" }Answer with:
{ "success": true, "data": { "sessionId": "7a10…", "eventId": "…" } }The sessionId in the first response is adopted and threaded into every later call,
so the receiver owns session identity rather than the client guessing at it. On
{ "success": false, "error": "…" } or a non-2xx, the tool call returns that error to
the agent.
That's the entire contract — a single endpoint. A receiver is an afternoon's work in whatever you already run.
Making it automatic
Logging that depends on the agent remembering to log is logging that stops after a
week. Wire it to a Stop hook so it fires at the end of every session:
// .claude/settings.json
{
"hooks": {
"Stop": [{ "matcher": "", "hooks": [{ "type": "command",
"command": "echo 'Before finishing: call log_work with what you did and why.'" }] }]
}
}Development
npm install
npm run build # tsc → dist/ (dist is committed so npx needs no build step)
npm testLicence
MIT
Available Tools
6 toolslink_prC
Link a pull request to this project's work log.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| repo | Yes | owner/name | |
| branch | No | ||
| status | No | ||
| prNumber | Yes | ||
| provider | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose what 'link' means operationally—whether it creates a log entry, updates a PR, or has side effects like sending notifications. There is no mention of required permissions, reversibility, or return behavior.
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 one terse sentence with no redundant wording, which is efficient. However, it is almost too sparse, lacking any structural breakdown that would help an agent parse requirements. Still, for conciseness it earns a high score.
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 has 6 parameters, 4 required, no output schema, and no annotations, a single sentence is insufficient. It does not explain what constitutes a successful link, what happens if the PR doesn't exist, or how the work log is affected. The description is markedly incomplete for this complexity.
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 low (17%), and the description adds no parameter explanations. The schema itself provides limited context (e.g., provider enum, repo format), but the description does not clarify how parameters like url, prNumber, or status should be used or relate to the linking operation.
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 action ('link') and resource ('pull request') with a specific destination ('this project's work log'). It is unambiguous and identifies the core purpose, though it does not explicitly distinguish itself from sibling tools like log_work or record_decision.
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 no context on when to use this tool versus alternatives, nor any exclusions or prerequisites. It only states what it does, leaving the agent without guidance on appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_workA
Log a unit of work when you finish something meaningful. Capture the WHY and any open loops — git already has the diff.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | why it was done | |
| summary | Yes | what was done (one line) | |
| commitSha | No | ||
| filesTouched | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful context beyond annotations (none provided): 'git already has the diff' implies the tool is for metadata/context, not code changes. However, it doesn't disclose whether this is a persistent write operation, auth requirements, or what happens on invocation. Since annotations are absent, the description carries the burden and only partially fulfills it.
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 concise, front-loaded sentences. Every word earns its place, delivering the core purpose and a key design philosophy without fluff.
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 logging tool with no output schema, the description gives the essential purpose and mindset but omits parameter details (especially commitSha and filesTouched) and any behavioral specifics. It's minimally viable but leaves gaps for optional parameters.
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% (intent and summary have descriptions; commitSha and filesTouched do not). The description adds guidance by stating to capture the WHY (intent) and open loops (likely in summary), and 'git already has the diff' hints that diff-related fields (commitSha/filesTouched) may be redundant. But it doesn't explain the un-documented parameters explicitly.
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 identifies the action ('Log a unit of work') and the resource (a unit of work), with context ('when you finish something meaningful'). It doesn't explicitly differentiate from siblings like 'update_progress' or 'record_decision', but the resource and phrasing are distinct enough.
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?
Provides a clear usage context: use when you finish something meaningful. However, it doesn't mention alternatives or exclusions, such as when to use 'update_progress' or 'record_decision' instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_decisionA
Record an architecturally consequential decision (ADR-style). Only call when a real choice was made.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| context | No | ||
| decision | Yes | the decision taken | |
| alternatives | No | ||
| consequences | No | ||
| supersedesId | No | id of a prior decision this replaces |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains what the tool does but does not describe side effects, return values, idempotency, or how supersedesId affects existing decisions. This is a significant gap for a decision-recording tool.
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 sentence with no fluff, front-loading the core purpose and a usage condition. 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?
Given 6 parameters, no output schema, and no annotations, a one-sentence description is insufficient. It omits details about the ADR format, expected field contents, and the supersede mechanism, leaving the agent to infer too much.
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%, and the tool description adds no parameter information. The schema describes 'decision' and 'supersedesId' but leaves title, context, alternatives, and consequences undocumented. The description does not compensate for this low 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 uses a specific verb+resource ('Record an architecturally consequential decision (ADR-style)') that clearly distinguishes it from sibling tools like log_work or link_pr. The qualifier 'architecturally consequential' adds precision about the intended scope.
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 states 'Only call when a real choice was made', providing a clear condition for when to use the tool. However, it does not mention alternatives or when not to use it, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_test_runB
Report the outcome of a test/verify run (counts, not full logs).
| Name | Required | Description | Default |
|---|---|---|---|
| suite | No | ||
| failed | No | ||
| passed | No | ||
| result | Yes | ||
| skipped | No | ||
| durationMs | No | ||
| failureSummary | No | short summary if failed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the disclosure burden. It adds 'counts, not full logs,' which clarifies the output type, but it omits whether the tool mutates state, requires permissions, or returns confirmation. The tool appears to be a reporting action but side effects are not described.
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, focused sentence that front-loads the purpose and adds one clarifying parenthetical. No wasted 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?
With 7 parameters, no output schema, and no annotations, the description is too sparse. It doesn't explain parameter relationships, required fields beyond the schema, or what the tool returns. The parenthetical about counts helps but is insufficient for complete operational guidance.
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 14% of parameters have schema descriptions, and the description does not elaborate on individual parameters. It hints that passed/failed/skipped are counts, but doesn't explain suite, durationMs, or failureSummary beyond what parameter names imply. The schema's enum for result is clear, but no additional meaning is added.
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 reports test/verify outcomes and restricts scope to counts rather than logs. This distinguishes it from sibling tools like log_work, though it doesn't explicitly name alternatives. The verb 'Report' and resource 'outcome of a test/verify run' are specific.
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 test/verify run has completed and you need to submit its outcome. It does not explicitly state when to use this tool over alternatives like log_work or update_progress, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_docA
Sync a long-form project document (plan/spec/progress/runbook/research) as rendered markdown. Upserts by (kind, key); the version bumps each sync. Use for docs an agent maintains in-repo, so the log carries their current state.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | stable slug within the kind, e.g. the doc filename | |
| body | Yes | the rendered markdown body | |
| kind | Yes | ||
| title | Yes | ||
| status | No | kind-specific, e.g. draft|approved|building|done |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It does reveal non-obvious behavior: upsert semantics by (kind, key) and version bumping per sync, plus the markdown format. However, it does not disclose overwrite/retention details, required permissions, or side effects beyond versioning.
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 tightly written sentences: front-loaded verb/resource, immediately followed by identity/version semantics and a clear use case. Every clause earns its place without repetition or fluff.
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 5-parameter tool with no output schema, the description adequately covers purpose, identity, version behavior, doc kinds, and intended usage. It is slightly light on return value/response behavior and explicit differentiation from siblings, but it is sufficient for correct tool selection and 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?
Schema description coverage is 60%, so the description adds some value. It clarifies that kind+key form the identity ('Upserts by (kind, key)'), and 'rendered markdown' explains the body format. Yet title and status are not semantically elaborated, and the enum values are already in the 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 uses a specific verb ('Sync') and identifies the resource ('long-form project document') with enumerations of doc kinds (plan/spec/progress/runbook/research). It also distinguishes from sibling tools by noting 'docs an agent maintains in-repo', clearly separating this from logging or progress-update tools.
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?
It explicitly states when to use the tool: 'Use for docs an agent maintains in-repo, so the log carries their current state.' This gives clear context, but it does not name alternative tools or provide explicit when-not-to-use guidance, keeping it just below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_progressB
Upsert the current status of a work item (feature/task). Overwrites the item's status; also records the change.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| summary | No | ||
| blockers | No | ||
| nextSteps | No | ||
| workItemKey | No | stable key for the work item; defaults to the session |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the operation overwrites the existing status and records the change, which is useful. However, it does not mention idempotency, reversibility, permission requirements, or behavior when the work item does not exist (despite the 'upsert' implication).
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, immediately states the core purpose, and adds a critical behavioral note about overwriting and recording. It wastes no words and is well-structured for quick comprehension.
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 tool has 5 parameters, is a mutation, lacks annotations and output schema, yet the description does not explain return values, error cases, or the meaning of several parameters. The 'upsert' semantics and defaulting of workItemKey to the session are only hinted in the schema, not described. For a write operation, this is insufficient.
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 20% (only workItemKey has a description). The tool description adds minimal parameter meaning beyond the schema: it clarifies 'status' as the main thing being updated, but leaves 'summary', 'blockers', and 'nextSteps' without semantic explanation. Since schema coverage is low, the description should compensate, but it does not.
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's purpose with a specific verb ('Upsert') and resource ('current status of a work item'), and clarifies it overwrites status and records the change. It is distinct enough from siblings like 'log_work' or 'record_decision' because it focuses on status updates, though it does not explicitly name alternatives.
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 for updating a work item's status, but it does not explicitly state when to use it versus alternatives, nor does it provide exclusions or prerequisites. The sibling tools are not referenced, so the agent must infer the tool's niche from its name and description.
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.
6 tool updates
v0.1.0- First observed
link_pr - First observed
log_work - First observed
record_decision - First observed
report_test_run - First observed
sync_doc - First observed
update_progress
TDQS
Most tools target distinct actions (logging work, recording decisions, reporting test runs, linking PRs, updating progress, syncing docs). However, log_work and update_progress could be confused since both deal with work item status, though descriptions help clarify boundaries.
All tool names follow a consistent verb_noun snake_case pattern (log_work, record_decision, report_test_run, link_pr, update_progress, sync_doc). The naming is predictable and uniform, making it easy to infer function from name.
With 6 tools, the set is well-scoped for a worklog server. Each tool covers a distinct aspect of work logging without redundancy or excessive granularity, fitting comfortably within the ideal 3-15 range.
The tool set is heavily write-oriented (log, record, report, link, update, sync) but lacks any retrieval or query tools. There is no way to read/list/export the work log, which is a significant gap for a server whose purpose is to capture work history. This will likely cause agent failures when attempting to review or summarize logged work.
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
MCP server for building and testing AI agents with multi-model experimentation and insights.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server that automatically logs AI coding assistant activities such as command executions and code generation, saving them as JSON files for later search and analysis.325MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server for AI agents to log activities, query logs, and leave notes for each other, featuring a web UI and REST API.MIT
- AlicenseNot gradedqualityFmaintenanceA local MCP server that records completed tasks to daily JSONL files and promotes substantial work to a cumulative weekly Markdown worklog, providing persistent, searchable logs of AI-assisted productivity.MIT
- FlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI coding agents runtime visibility and AI-managed debug logging. It replaces blind print() debugging by turning runtime execution into causal chains, allowing agents to instantly locate bugs by finding missing .success events in Python and TypeScript code. Single binary with MCP, CLI, and HTTP interfaces.-
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/aadityakushwaha/worklog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server