MCP server for the Keeping time-tracking API
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
๐ก Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Open-source Model Context Protocol (MCP) server that exposes the Keeping (api.keeping.nl) time-tracking API as tools an AI coding assistant can call. Built for solo developers who use Claude Code (or any MCP-capable client) and want their billable hours logged into Keeping at the end of a session instead of typed in by hand, while keeping Keeping's existing native Jortt invoicing integration intact. Every write tool is dry-run by default โ your hours never reach Keeping until you explicitly confirm.
โ Writes are dry-run BY DEFAULT
Every write tool (
keeping_add_entry,keeping_update_entry,keeping_delete_entry,keeping_start_timer,keeping_stop_timer,keeping_resume_timer) returns a preview unless you passconfirm: truein the tool call.Setting
KEEPING_REQUIRE_CONFIRM=falsein your environment disables this gate. Writes then happen on the first call โ there is no second chance.Recommendation: never disable this gate unless you are running the server in a non-interactive automation context and have explicitly accepted the loss of the confirmation step.
No install required โ npx fetches the package on first run:
The server speaks the MCP stdio protocol and stays in the foreground waiting for JSON-RPC frames on stdin โ exit with Ctrl+C. In practice you do not run it by hand; an MCP-capable client (Claude Code, Claude Desktop, Cursor, etc.) spawns it for you using the config snippets below.
Optional โ install globally so keeping-mcp is on your PATH:
Requires Node.js >=22. The package is published to npmjs.com/package/keeping-mcp with sigstore provenance attestations.
Add to %APPDATA%\Claude\claude_desktop_config.json or to your project's .mcp.json file.
The cmd /c wrapper is required on Windows โ npx resolves to npx.cmd, and Claude Code's process spawn does not search PATHEXT extensions (see anthropics/claude-code#58510).
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or ~/.config/Claude/claude_desktop_config.json (Linux), or your project's .mcp.json.
Any MCP-capable client that supports the stdio transport works. The server is started by npx -y keeping-mcp and reads KEEPING_TOKEN from its environment. Discoverable in the MCP Registry as io.github.Red-Square-Software/keeping-mcp.
KEEPING_TOKEN in your shell environment OR in your Claude Code config env block.The token has full read+write access to your time entries โ treat it like a password. Never commit it to git, never paste it into a chat, never read it back from a tool response (keeping-mcp never echoes it).
| Variable | Required | Default | Purpose |
|---|---|---|---|
KEEPING_TOKEN | yes | โ | Keeping personal access token (created via the section above). |
KEEPING_REQUIRE_CONFIRM | no | true | When true, write tools return a preview unless called with confirm: true. Setting to false disables the gate entirely โ see warning below. |
KEEPING_ORG_ID | no | โ | Pin all calls to one organisation id. When unset and the token has access to multiple orgs, write tools require explicit organisation_id input per call. |
KEEPING_LOG_LEVEL | no | info | Server stderr log verbosity. Accepts: debug, info, warn, error. |
โ Writes are dry-run BY DEFAULT
Every write tool (
keeping_add_entry,keeping_update_entry,keeping_delete_entry,keeping_start_timer,keeping_stop_timer,keeping_resume_timer) returns a preview unless you passconfirm: truein the tool call.Setting
KEEPING_REQUIRE_CONFIRM=falsein your environment disables this gate. Writes then happen on the first call โ there is no second chance.Recommendation: never disable this gate unless you are running the server in a non-interactive automation context and have explicitly accepted the loss of the confirmation step.
keeping-mcp registers 12 tools when the server starts. Read tools (keeping_me, keeping_organisations, keeping_projects, keeping_tasks, keeping_list_entries, keeping_timer_status) call Keeping's API without confirmation. Write tools (keeping_add_entry, keeping_update_entry, keeping_delete_entry, keeping_start_timer, keeping_stop_timer, keeping_resume_timer) return a dry-run preview unless invoked with confirm: true (default behavior controlled by KEEPING_REQUIRE_CONFIRM).
Write tools follow a two-step pattern: propose-then-confirm. The first call returns a preview of the HTTP request the server would send; the second call (with confirm: true) actually sends it.
Step 1 โ preview (no confirm, no API call made). Illustrative; actual field names match Keeping's OpenAPI (see https://developer.keeping.nl).
Step 2 โ confirm (confirm: true added, request is sent to Keeping). Illustrative; actual response shape mirrors Keeping's OpenAPI.
Releases are published via GitHub Actions OIDC trusted publishing (no long-lived npm tokens). Every release carries an npm provenance attestation linking the published tarball to a specific commit in this repository.
All server output goes to stderr โ stdout is reserved for MCP JSON-RPC framing. Never write diagnostic output to stdout; use console.error for logging.
MIT โ see LICENSE.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/keeping-mcp)<a href="https://allmcps.com/mcp/keeping-mcp"><img src="https://allmcps.com/api/badge/keeping-mcp?style=directory" alt="Keeping Mcp on AllMCPs" /></a>