
Research
/Security News
OpenAPI React Query Codegen Compromised in Mini Shai-Hulud npm Supply Chain Attack
Ten malicious OpenAPI React Query Codegen versions were published to npm in the Mini Shai-Hulud attack, all with valid provenance.
@timewave-cloud/mcp
Advanced tools
TimeWave MCP server — manage TimeWave tasks and the time tracker from an AI client (Claude Desktop, IDEs) over the Model Context Protocol.
Lets an AI client (Claude Desktop, IDEs, etc.) manage TimeWave tasks and the time tracker over the Model Context Protocol.
Everything the AI does through this server is attributed to it in TimeWave
(viaApi), so those actions show an AI badge in the app.
Two ways in, and neither asks you to carry a token by hand.
You do not need this package at all. Point the client at:
https://timewave.cloud/api/mcp
It sends you to a TimeWave page where you are already signed in, tells you what is being asked for, and you approve it. Nothing is installed, nothing is copied.
npx @timewave-cloud/mcp login --url=https://timewave.cloud
It prints a short code and a link. Approve the code in a browser, and the token
arrives here by itself — saved to ~/.timewave/mcp.json with 0600
permissions. Then point your client at this package:
{
"mcpServers": {
"timewave": {
"command": "npx",
"args": ["-y", "@timewave-cloud/mcp"],
"env": { "TIMEWAVE_API_URL": "https://timewave.cloud" }
}
}
}
That block holds no secret — only a command and an address. The token stays in your own config file, which is the difference between a credential you look after and one that ends up in a screenshot.
npx fetches and runs the server, so there is nothing to clone or install
(Node 18+, for global fetch).
When what you are connecting is a script rather than a person, create a key in
TimeWave (user menu → Account & API keys), choose its scopes — read,
tasks, timer, docs, secrets — and pass it as TIMEWAVE_API_KEY. The
environment wins over a saved login, so anything already set up this way keeps
working untouched.
A key acts as you and can never do more than you can; a tool whose scope the key lacks comes back as an error naming the missing scope.
Claude Desktop on Windows launches MCP servers without a shell and can't resolve
bare npx, so use cmd /c:
{
"mcpServers": {
"timewave": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@timewave-cloud/mcp"],
"env": { "TIMEWAVE_API_URL": "https://timewave.cloud" }
}
}
}
Fully quit and reopen Claude Desktop after editing the config. If TIMEWAVE_API_URL
is omitted it defaults to http://localhost:3000, so tool calls fail with a
connection error — set it to your instance.
To run from a checkout without publishing, point the client at the file
directly: "command": "node", "args": ["/absolute/path/to/mcp/server.mjs"]
(run npm install in mcp/ first so the SDK and zod resolve).
This directory is a self-contained npm package (mcp/package.json, bin: timewave-mcp). To release:
cd mcp
npm publish --access public # after `npm login`; needs the timewave-cloud npm org
Bump version in mcp/package.json for each release.
| Tool | What it does |
|---|---|
guide | How TimeWave works + smart-commit rules (call this first) |
list_projects | Projects + their kanban columns |
list_members | Members (userId for assigning) |
list_tasks | Tasks, filter by projectId / status (open|done|all) |
get_task | One task with checklist + activity |
create_task | Create a task (optional column, dueDate, assigneeId) |
update_task | Edit title/description/priority/assignee/dueDate |
move_task | Move to a column (by name or id) |
complete_task | Mark done / reopen |
comment_task | Add a comment to the activity feed |
delete_task | Permanently delete a task |
start_timer | Start the tracker (optionally on a task) |
stop_timer | Stop the running timer |
timer_status | Is a timer running, and for how long |
log_time | Add a manual entry (durationMinutes) |
list_time_entries | List entries; filter by project/task/date range |
get_time_entry | One time entry by id |
update_time_entry | Edit duration/date/description/project/billable |
delete_time_entry | Permanently delete a time entry |
whoami | Who the key belongs to, and which organization |
add_checklist_item | Add a subtask to a task |
set_checklist_item | Tick a subtask off (or back on) — itemId from get_task |
remove_checklist_item | Remove a subtask |
list_timesheets | Recent weeks: total, status, locked or not |
get_timesheet | One week, day by day and project by project |
submit_timesheet | Hand a week in — this locks it |
withdraw_timesheet | Take a submitted week back (only before review) |
list_docs | Search the knowledge base by title |
get_doc | Read a document with its Markdown |
create_doc | Write a new document |
update_doc | Edit the title, body or visibility |
list_doc_versions | A document's history — who changed what, when |
get_doc_version | Read one earlier version in full |
list_doc_attachments | Files on a document — metadata and a url, never the bytes |
Two of them, and a key can hold the docs scope and still see nothing:
not found is not something to route around.New documents are private — visible only to their author. Pass
visibility: "ORG" when writing for the team.
update_doc replaces the whole body. The previous text is kept as a version and
can be read back with list_doc_versions / get_doc_version, but somebody has
to go and look for it — so change the part that is wrong rather than rewriting a
page from memory.
There is no tool for deleting a document, on purpose. Nor for uploading a file:
bytes as text is the wrong shape for this protocol. list_doc_attachments hands
back a url — fetch it over plain HTTP with the same key, which that route
accepts as well as a browser session.
When you commit code to a repository connected to a project, reference the task key in the commit message and TimeWave acts on it during import (manual or the push webhook):
WAVE-12 — links the commit to that task (no other action).closes WAVE-12 (also close/closed/fix/fixes/fixed/resolve/resolves/resolved)
— marks the task done and moves it to the board's last column.WAVE-12 #time 2h — logs a time entry on the task (2h, 90m, 1:30, 1.5h).Actions are attributed to the commit author (matched to a member by email), run once per commit, and only for commits authored after the repo was connected. Any message that contains the syntax triggers it — keep example directives out of real commit messages. Call the `guide` tool for the full reference.
The server is a thin wrapper over \/api/v1`(Bearertw_…` auth). Example:
curl -s http://localhost:3000/api/v1/tasks \
-H "Authorization: Bearer tw_your_key"
FAQs
TimeWave MCP server — manage TimeWave tasks and the time tracker from an AI client (Claude Desktop, IDEs) over the Model Context Protocol.
The npm package @timewave-cloud/mcp receives a total of 35 weekly downloads. As such, @timewave-cloud/mcp popularity was classified as not popular.
We found that @timewave-cloud/mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Research
/Security News
Ten malicious OpenAPI React Query Codegen versions were published to npm in the Mini Shai-Hulud attack, all with valid provenance.

Security News
Socket joins more than 100 technology, cybersecurity, and financial organizations calling for a global surge in cyber defense.

Product
Enterprise security teams can now detect malware, credential theft, suspicious network activity, and risky updates across Microsoft Edge extensions.