WakaTime MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read your WakaTime coding time: summaries, stats, projects, goals, commits and leaderboards.
23 tools: 1 change things and 22 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads22Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http wakatime https://wakatime.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "wakatime_list_commits" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "wakatime_list_commits" says "list": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Changes things 1Claude Code: ask
wakatime_list_commitsCommits of a WakaTime project with the time spent coding on each (needs a connected repository).1 finding
Why it is in this group
- The name "wakatime_list_commits" says "list": a word for reading.
- The description's first verb is "commit": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "wakatime_list_commits" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "wakatime_list_commits" says "list": a word for reading.
Description, as the server wrote it Commits of a WakaTime project with the time spent coding on each (needs a connected repository). Filter by author or branch; paged. Needs the read_heartbeats scope for OAuth tokens. GET /users/current/projects/{project}/commits.
Annotations the server declares
- title: List project commits
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
Only reads 22Claude Code: allow
wakatime_get_all_time_since_todayTotal coding time since the user's WakaTime account (or one project) was created, with daily average and the range covered.No findings
Why it is in this group
- The name "wakatime_get_all_time_since_today" says "get": a word for reading.
Description, as the server wrote it Total coding time since the user's WakaTime account (or one project) was created, with daily average and the range covered. GET /users/current/all_time_since_today.
Annotations the server declares
- title: Get all-time total
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_commitOne commit of a WakaTime project by hash, with the time spent coding on it.No findings
Why it is in this group
- The name "wakatime_get_commit" says "get": a word for reading.
Description, as the server wrote it One commit of a WakaTime project by hash, with the time spent coding on it. Needs the read_heartbeats scope for OAuth tokens. GET /users/current/projects/{project}/commits/{hash}.
Annotations the server declares
- title: Get project commit
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_durationsThe coding sessions (durations) of one day, each with start time, length in seconds and the project (or other slice) it belongs to.No findings
Why it is in this group
- The name "wakatime_get_durations" says "get": a word for reading.
Description, as the server wrote it The coding sessions (durations) of one day, each with start time, length in seconds and the project (or other slice) it belongs to. Needs the read_heartbeats scope for OAuth tokens. GET /users/current/durations.
Annotations the server declares
- title: Get durations for a day
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_goalOne goal by id with its chart data (cached; an empty chart means the cache is still building, retry shortly).No findings
Why it is in this group
- The name "wakatime_get_goal" says "get": a word for reading.
Description, as the server wrote it One goal by id with its chart data (cached; an empty chart means the cache is still building, retry shortly). GET /users/current/goals/{goal}.
Annotations the server declares
- title: Get goal
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_heartbeatsThe raw heartbeats (activity pings from editor plugins) of one day: entity (file path or domain), type, category, project, branch, language, time, lines and AI line changes.No findings
Why it is in this group
- The name "wakatime_get_heartbeats" says "get": a word for reading.
Description, as the server wrote it The raw heartbeats (activity pings from editor plugins) of one day: entity (file path or domain), type, category, project, branch, language, time, lines and AI line changes. Large days are cut to `limit` heartbeats starting at `offset`; total_heartbeats says how many the day has. Needs the read_heartbeats scope for OAuth tokens. GET /users/current/heartbeats.
Annotations the server declares
- title: Get heartbeats for a day
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_insightOne WakaTime insight for a range: stats, weekdays (average per weekday), days (per-day totals, optionally one weekday), ai_days, best_day, daily_average, or a breakdown by projects…No findings
Why it is in this group
- The name "wakatime_get_insight" says "get": a word for reading.
Description, as the server wrote it One WakaTime insight for a range: stats, weekdays (average per weekday), days (per-day totals, optionally one weekday), ai_days, best_day, daily_average, or a breakdown by projects, languages, editors, categories, machines or operating_systems. GET /users/current/insights/{insight_type}/{range}.
Annotations the server declares
- title: Get insight
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_org_dashboard_summariesOne day of coding activity for every developer on an organization dashboard (grand total plus breakdowns per member).No findings
Why it is in this group
- The name "wakatime_get_org_dashboard_summaries" says "get": a word for reading.
Description, as the server wrote it One day of coding activity for every developer on an organization dashboard (grand total plus breakdowns per member). GET /users/current/orgs/{org}/dashboards/{dashboard}/summaries.
Annotations the server declares
- title: Get dashboard summaries for a day
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_org_member_summariesOne dashboard member's coding activity as daily summaries for a date range (give start and end, or a named range).No findings
Why it is in this group
- The name "wakatime_get_org_member_summaries" says "get": a word for reading.
Description, as the server wrote it One dashboard member's coding activity as daily summaries for a date range (give start and end, or a named range). GET /users/current/orgs/{org}/dashboards/{dashboard}/members/{member}/summaries.
Annotations the server declares
- title: Get dashboard member summaries
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_private_leaderboardThe ranking of a private leaderboard: rank, member and total coding time (or AI lines / AI spend) per language, country and board type; paged (without page it starts at the user's …No findings
Why it is in this group
- The name "wakatime_get_private_leaderboard" says "get": a word for reading.
Description, as the server wrote it The ranking of a private leaderboard: rank, member and total coding time (or AI lines / AI spend) per language, country and board type; paged (without page it starts at the user's own page). GET /users/current/leaderboards/{board}.
Annotations the server declares
- title: Get private leaderboard
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_public_leadersWakaTime's public leaderboard of the most active coders over the last 7 days, filterable by language, country, hireable badge and ranking type; paged.No findings
Why it is in this group
- The name "wakatime_get_public_leaders" says "get": a word for reading.
Description, as the server wrote it WakaTime's public leaderboard of the most active coders over the last 7 days, filterable by language, country, hireable badge and ranking type; paged. Each leader is reduced to rank, name, username, country, total and daily-average time and top 3 languages. GET /leaders.
Annotations the server declares
- title: Get public leaderboard
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_statsAggregated coding stats for a range: total time, daily average, best day, AI vs human line changes, and the full breakdown by language, project, editor, operating system, category,…No findings
Why it is in this group
- The name "wakatime_get_stats" says "get": a word for reading.
Description, as the server wrote it Aggregated coding stats for a range: total time, daily average, best day, AI vs human line changes, and the full breakdown by language, project, editor, operating system, category, dependencies and machine. If the reply says it is still calculating, call again shortly. GET /users/current/stats/{range}.
Annotations the server declares
- title: Get coding stats
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_status_bar_todayToday's coding activity as shown in an editor status bar: grand total plus breakdowns by project, language, editor and more.No findings
Why it is in this group
- The name "wakatime_get_status_bar_today" says "get": a word for reading.
Description, as the server wrote it Today's coding activity as shown in an editor status bar: grand total plus breakdowns by project, language, editor and more. Cached data only; an empty summary means the cache is still being filled. GET /users/current/status_bar/today.
Annotations the server declares
- title: Get today's coding time
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_summariesCoding activity as one summary per day for a date range: grand total plus breakdowns by project, language, editor, operating system, category, dependencies and machine, with cumula…No findings
Why it is in this group
- The name "wakatime_get_summaries" says "get": a word for reading.
Description, as the server wrote it Coding activity as one summary per day for a date range: grand total plus breakdowns by project, language, editor, operating system, category, dependencies and machine, with cumulative total and daily average. Give start and end, or one named range. Use project (and branches) to also get per-branch and per-file entities. GET /users/current/summaries.
Annotations the server declares
- title: Get daily summaries
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_get_userThe WakaTime user this key belongs to: id, username, display name, email, timezone, plan, last plugin/project/branch and last heartbeat time.No findings
Why it is in this group
- The name "wakatime_get_user" says "get": a word for reading.
Description, as the server wrote it The WakaTime user this key belongs to: id, username, display name, email, timezone, plan, last plugin/project/branch and last heartbeat time. GET /users/current.
Annotations the server declares
- title: Get current user
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_goalsThe user's coding goals: title, type, target seconds, status, chart data per period, languages/projects/editors it covers and who it is shared with.No findings
Why it is in this group
- The name "wakatime_list_goals" says "list": a word for reading.
Description, as the server wrote it The user's coding goals: title, type, target seconds, status, chart data per period, languages/projects/editors it covers and who it is shared with. Needs the read_goals scope for OAuth tokens. GET /users/current/goals.
Annotations the server declares
- title: List goals
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_machinesThe machines (computers) that sent coding activity: id, name, host name, IP, timezone and last-seen time.No findings
Why it is in this group
- The name "wakatime_list_machines" says "list": a word for reading.
Description, as the server wrote it The machines (computers) that sent coding activity: id, name, host name, IP, timezone and last-seen time. GET /users/current/machine_names.
Annotations the server declares
- title: List machines
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_org_dashboard_membersThe members of an organization dashboard: id, username, full name, email, photo and whether their activity is view-only hidden.No findings
Why it is in this group
- The name "wakatime_list_org_dashboard_members" says "list": a word for reading.
Description, as the server wrote it The members of an organization dashboard: id, username, full name, email, photo and whether their activity is view-only hidden. GET /users/current/orgs/{org}/dashboards/{dashboard}/members.
Annotations the server declares
- title: List dashboard members
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_org_dashboardsThe dashboards of an organization: id, name, timezone, member count and what the user may view or join.No findings
Why it is in this group
- The name "wakatime_list_org_dashboards" says "list": a word for reading.
Description, as the server wrote it The dashboards of an organization: id, name, timezone, member count and what the user may view or join. GET /users/current/orgs/{org}/dashboards.
Annotations the server declares
- title: List organization dashboards
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_orgsThe WakaTime organizations the user belongs to: id, name, people count, keystroke timeout and timezone preferences and what the user may do.No findings
Why it is in this group
- The name "wakatime_list_orgs" says "list": a word for reading.
Description, as the server wrote it The WakaTime organizations the user belongs to: id, name, people count, keystroke timeout and timezone preferences and what the user may do. Needs the read_orgs scope for OAuth tokens. GET /users/current/orgs.
Annotations the server declares
- title: List organizations
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_private_leaderboardsThe private leaderboards the user is in: id, name, time range, member count and edit rights.No findings
Why it is in this group
- The name "wakatime_list_private_leaderboards" says "list": a word for reading.
Description, as the server wrote it The private leaderboards the user is in: id, name, time range, member count and edit rights. Needs the read_private_leaderboards scope for OAuth tokens. GET /users/current/leaderboards.
Annotations the server declares
- title: List private leaderboards
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_projectsThe user's WakaTime projects with id, name, repository, color, clients, first and last heartbeat time and badge/public-url flags.No findings
Why it is in this group
- The name "wakatime_list_projects" says "list": a word for reading.
Description, as the server wrote it The user's WakaTime projects with id, name, repository, color, clients, first and last heartbeat time and badge/public-url flags. Optionally filter by a name search. GET /users/current/projects.
Annotations the server declares
- title: List projects
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
wakatime_list_user_agentsThe editor and plugin user agents that sent coding activity: editor, version, OS, AI model if any, and last-seen time.No findings
Why it is in this group
- The name "wakatime_list_user_agents" says "list": a word for reading.
Description, as the server wrote it The editor and plugin user agents that sent coding activity: editor, version, OS, AI model if any, and last-seen time. GET /users/current/user_agents.
Annotations the server declares
- title: List editors and plugins used
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http wakatime https://wakatime.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__wakatime__wakatime_get_user",
"mcp__wakatime__wakatime_get_summaries",
"mcp__wakatime__wakatime_get_stats",
"mcp__wakatime__wakatime_get_all_time_since_today",
"mcp__wakatime__wakatime_get_status_bar_today",
"mcp__wakatime__wakatime_get_insight",
"mcp__wakatime__wakatime_get_durations",
"mcp__wakatime__wakatime_get_heartbeats",
"mcp__wakatime__wakatime_list_projects",
"mcp__wakatime__wakatime_list_machines",
"mcp__wakatime__wakatime_list_user_agents",
"mcp__wakatime__wakatime_get_commit",
"mcp__wakatime__wakatime_list_goals",
"mcp__wakatime__wakatime_get_goal",
"mcp__wakatime__wakatime_list_orgs",
"mcp__wakatime__wakatime_list_org_dashboards",
"mcp__wakatime__wakatime_list_org_dashboard_members",
"mcp__wakatime__wakatime_get_org_dashboard_summaries",
"mcp__wakatime__wakatime_get_org_member_summaries",
"mcp__wakatime__wakatime_list_private_leaderboards",
"mcp__wakatime__wakatime_get_private_leaderboard",
"mcp__wakatime__wakatime_get_public_leaders"
],
"ask": [
"mcp__wakatime__wakatime_list_commits"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as wakatime. Review it before you use it.