WakaTime MCP server for AI agents

Live

OAUTH 2.0

CODING ACTIVITY

Analytics

WakaTime gives your agent coding activity from each user's WakaTime account: read coding time by project, language, and editor, track goals and leaderboards, view organization dashboards, and log heartbeats and external durations.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
WakaTime
agent · Acme Q3
Run
How much did I code this week, and on which projects?
S
wakatime_get_stats
112ms
Developer productivity agent
You coded 23 hours 40 minutes this week. The api-server project took 61% of that time.
Sources: WakaTime stats, last 7 days
wakatime
7 days
18:29
Message Claude...

Tools your developer productivity agent reaches for on WakaTime, scoped per user.

CALL ANY TOOL
35 tools for coding activity in WakaTime: read summaries, stats, and durations, track projects, commits, and goals, view organization dashboards and leaderboards, and log heartbeats.
wakatime_create_data_dump
Create data dump
Start a background export of the user's coding data. Returns the new export's id, type, status and percent complete; the download url appears once it completes. Use list_data_dumps afterwards to poll status and get the download url. Large exports can take a while.
Parameters
Name
Type
Required
Description
type
string
Required
Type of export: daily for daily summaries, or heartbeats for raw heartbeats. One of: `daily`, `heartbeats`.
email_when_finished
boolean
Optional
Whether to email the user a download link when the export completes. The API defaults to true.
wakatime_create_external_duration
Create external duration
wakatime_create_heartbeat
Create heartbeat
wakatime_get_all_time_since_today
Get all time since today
wakatime_get_commit
Get commit
wakatime_get_current_user
Get current user
wakatime_get_custom_rules_progress
Get custom rules progress
wakatime_get_durations
Get durations
wakatime_get_goal
Get goal
wakatime_get_insight
Get insight
wakatime_get_org_dashboard_summaries
Get org dashboard summaries
wakatime_get_org_member_durations
Get org member durations
wakatime_get_org_member_summaries
Get org member summaries
wakatime_get_private_leaderboard
Get private leaderboard
wakatime_get_stats
Get stats
wakatime_get_status_bar_today
Get status bar today
wakatime_list_commits
List commits
wakatime_list_custom_rules
List custom rules
wakatime_list_data_dumps
List data dumps
wakatime_list_editors
List editors
wakatime_list_external_durations
List external durations
wakatime_list_heartbeats
List heartbeats
wakatime_list_machine_names
List machine names
wakatime_list_org_custom_rules
List org custom rules
wakatime_list_org_dashboard_members
List org dashboard members
wakatime_list_org_dashboards
List org dashboards
wakatime_list_private_leaderboards
List private leaderboards
wakatime_list_program_languages
List program languages
wakatime_list_projects
List projects
wakatime_list_public_leaders
List public leaders

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// WakaTime tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wakatime"], toolNames: [
    "wakatime_get_stats",
    "wakatime_get_summaries",
    "wakatime_list_projects"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Summarize my coding time by project for the last 7 days" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wakatime"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Summarize my coding time by project for the last 7 days" }],
  tools,
});

// Execute the tool call with the user's vaulted WakaTime OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wakatime"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Summarize my coding time by project for the last 7 days" }],
  tools,
});

// Tool call runs with the user's vaulted WakaTime OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["wakatime"] }, pageSize: 100,
});

const agent = new Agent({
  name: "dev_productivity_agent",
  model: "gemini-2.5-pro",
  instruction: "WakaTime tools scoped to this user",
  tools,
});

await agent.run("Summarize my coding time by project for the last 7 days");
Try these prompts
Copy any prompt into your agent. Each maps directly to a WakaTime tool. Click to copy, paste into your agent, done.
My activity
Copy the prompt
Copied
How much did I code today?
Copy the prompt
Copied
Show my coding stats by language for the last 30 days.
Copy the prompt
Copied
List my WakaTime projects.
Goals and teams
Copy the prompt
Copied
How am I tracking against my coding goals?
Copy the prompt
Copied
Show today's coding activity for everyone on the Platform dashboard.
Copy the prompt
Copied
Who leads my private leaderboard?
Logging and exports
Copy the prompt
Copied
Log 90 minutes of design review as an external duration for today.
Copy the prompt
Copied
List commits on the api-server project with time spent.
Copy the prompt
Copied
Start an export of my coding data.
SEE HOW AUTH WORKS
Each user signs in to WakaTime once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
WakaTime
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
WakaTime
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
WakaTime
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
WakaTime
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other analytics and developer connectors.
Engineering Teams
Engineering standup agent
Pulls commits from GitHub and GitLab, tracks issue movement in Jira, and posts a per-engineer standup brief to Slack. Each engineer's activity is read on their own delegated OAuth.
People Ops and HR teams
Performance review collector
Collects review feedback from Airtable and Google Forms scoped to each manager's direct reports, writes per-employee summaries to Notion, and DMs the manager a Slack digest.
Test other agents
See the same per-user auth pattern across other analytics and developer connectors.
ENGINEERING
Engineering standup agent
Pull commits from GitHub and GitLab, track Jira issue movement, and post a per-engineer standup brief to Slack.
PEOPLE OPS
Performance review collector agent
Collect review feedback from Airtable and Google Forms per manager, summarise each report in Notion, and DM the digest in Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared WakaTime token looks fine in a demo. In production every logged heartbeat looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
WakaTime today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access WakaTime as the user or through a shared service account?
As the user. Each user signs in to WakaTime once, and Scalekit stores and refreshes their tokens. Heartbeats and durations the agent logs are attributed to that user in your audit trail, not a shared service account.
Where is the WakaTime OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in WakaTime?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the read tools without wakatime_create_heartbeat or wakatime_create_external_duration, which add time to the user's stats. Scalekit also enforces scope checks before every API call.
What happens when a user revokes WakaTime access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent see my team's coding activity?
Yes, for organizations the connected user belongs to. wakatime_list_orgs and wakatime_list_org_dashboards return them, and the organization dashboard tools return per-member durations and summaries for a dashboard that user can view.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""wakatime"": {
""url"": ""https://mcp.scalekit.com/wakatime"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.wakatime]
url = ""https://mcp.scalekit.com/wakatime""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""wakatime"": {
""url"": ""https://mcp.scalekit.com/wakatime"",
""type"": ""http""
}
}
}