Skip to content

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.

Changes · 1

23 tools: 1 change things and 22 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "wakatime_list_commits" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "wakatime_list_commits" says "list": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "wakatime_list_commits" says "list": a word for reading.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.