mcpField
A
ActivityWatch MCP Server

ActivityWatch MCP Server

本地服务
github.com/8bitgentleman生产力7428 周前更新

关于 ActivityWatch MCP Server

ActivityWatch MCP Server 将 MCP 客户端连接到 ActivityWatch 时间追踪数据。它提供桶列表、AQL 查询、原始事件读取和设置访问工具。

主要功能

  1. 01列出桶并可按类型筛选
  2. 02运行 ActivityWatch 查询语言查询
  3. 03读取桶中的原始事件
  4. 04读取全部或指定设置

适用场景

  1. 01汇总一段时间内的应用使用情况
  2. 02查看指定日期范围的网站活动
  3. 03按 AFK 状态筛选窗口活动
  4. 04检查 ActivityWatch 配置

MCP 相关

通过 list-buckets、run-query、get-events 和 get-settings 四种工具,向 MCP 客户端开放 ActivityWatch 桶、AQL 查询、原始事件和设置。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ActivityWatch MCP 服务

一个连接到 ActivityWatch 的 Model Context Protocol (MCP) 服务,让 Claude 等大模型能够与你的时间追踪数据交互。

ActivityWatch Server MCP server

功能

  • 列出存储桶:查看所有可用的 ActivityWatch 存储桶
  • 运行查询:执行强大的 AQL(ActivityWatch Query Language)查询
  • 获取原始事件:直接从任意存储桶检索事件
  • 获取设置:访问 ActivityWatch 配置设置

安装

你可以从 npm 安装 ActivityWatch MCP 服务,也可以自行构建。

从 npm 安装(即将推出)
# Global installation
npm install -g activitywatch-mcp-server

# Or install locally
npm install activitywatch-mcp-server
从源码构建
  1. 克隆此仓库:

    git clone https://github.com/8bitgentleman/activitywatch-mcp-server.git
    cd activitywatch-mcp-server
    
  2. 安装依赖:

    npm install
    
  3. 构建项目:

    npm run build
    

前提条件

  • 已安装并运行 ActivityWatch
  • Node.js(v14 或更高版本)
  • Claude for Desktop(或任何其他 MCP 客户端)

用法

与 Claude for Desktop 配合使用
  1. 打开你的 Claude for Desktop 配置文件:

    • Windows:%APPDATA%\Claude\claude_desktop_config.json
    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  2. 添加 MCP 服务配置:

    {
    "mcpServers": {
        "activitywatch": {
        "command": "activitywatch-mcp-server",
        "args": []
        }
    }
    }
    

    如果你是从源码构建的,请使用:

    {
    "mcpServers": {
        "activitywatch": {
        "command": "node",
        "args": ["/path/to/activitywatch-mcp-server/dist/index.js"]
        }
    }
    }
    
  3. 重启 Claude for Desktop

  4. 查看 Claude 界面中的 MCP 图标,确认其正常工作

在 Linux 上使用无 root 的 podman 容器配合 Gemini CLI

请务必先构建镜像:

version=$(npm pkg get version | tr -d '"')
podman build . -t activitywatch-mcp-server:${version}

此示例使用了针对 Activity Watch 在 127.0.0.1 上不可用的覆盖配置(见下一节)。如果不需要,可以省略 AW_API_BASE 环境变量。

{
  "mcpServers": {
    "activitywatch-mcp-server": {
      "command": "/usr/bin/podman",
      "args": [
        "run",
        "--rm",
        "--interactive",
        "--userns=keep-id",
        "-e",
        "AW_API_BASE",
        "localhost/activitywatch-mcp-server:1.2.1"
      ],
      "env": {
        "AW_API_BASE": "http://mydesktop.local:5600/api/0"
      }
    }
  }
}
覆盖 ActivityWatch 服务主机/端口

如果你想在 Windows Subsystem for Linux 内部运行此 MCP 服务,例如在容器中,那么在 Windows 中运行的 AW 服务将无法通过 127.0.0.1 访问。要覆盖标准的 localhost 连接,请使用环境变量 AW_API_BASE 或 --aw-api-base 标志,如下所示:

# Using environment variable
export AW_API_BASE=http://mydesktop.local:5600/api/0
node dist/index.js

# Or using command-line flag
node dist/index.js --aw-api-base=http://mydesktop.local:5600/api/0

NOTE:AW 服务可能会对用于连接它的名称比较挑剔,但它会接受与运行所在计算机名称匹配并带有 .local 后缀的名称。

示例查询

以下是一些你可以在 Claude 中尝试的示例查询:

  • 列出所有存储桶:"我有哪些 ActivityWatch 存储桶?"
  • 获取应用使用摘要:"你能告诉我今天使用最多的应用是哪些吗?"
  • 查看浏览历史:"今天我在哪些网站上花费的时间最多?"
  • 检查生产力:"今天我在生产力应用中花了多少时间?"
  • 查看设置:"我的 ActivityWatch 设置是什么?"或"你能检查 ActivityWatch 中的某个特定设置吗?"

可用工具

list-buckets

列出所有可用的 ActivityWatch 存储桶,并支持可选的类型过滤。

参数:

  • type(可选):按类型过滤存储桶(例如 "window"、"web"、"afk")
  • includeData(可选):在响应中包含存储桶数据
run-query

在 ActivityWatch 的查询语言(AQL)中运行查询。

参数:

  • timeperiods:要查询的时间段,格式为字符串数组。对于日期 范围,使用格式:["2024-10-28/2024-10-29"]
  • query:ActivityWatch 查询语言中的查询语句数组,其中每个 元素都是一个完整查询,各语句之间用分号分隔
  • name(可选):查询的名称(用于缓存)

IMPORTANT:每个查询字符串应包含一个完整查询,其中多条 语句用分号分隔。

示例请求格式:

{
  "timeperiods": ["2024-10-28/2024-10-29"],
  "query": ["events = query_bucket('aw-watcher-window_UNI-qUxy6XHnLkk'); RETURN = events;"]
}

请注意:

  • timeperiods 应使用预先格式化好的日期范围,并用斜杠分隔
  • query 数组中的每个元素都是一个包含所有语句的完整查询
get-events

从 ActivityWatch 存储桶获取原始事件。

参数:

  • bucketId:要从中获取事件的存储桶 ID
  • start(可选):ISO 格式的开始日期/时间
  • end(可选):ISO 格式的结束日期/时间
  • limit(可选):要返回的最大事件数
get-settings

从服务器获取 ActivityWatch 设置。

参数:

  • key(可选):获取特定的设置键,而不是所有设置

查询语言示例

ActivityWatch 使用一种简单的查询语言。以下是一些常见模式:

// Get window events
window_events = query_bucket(find_bucket("aw-watcher-window_"));
RETURN = window_events;

// Get only when not AFK
afk_events = query_bucket(find_bucket("aw-watcher-afk_"));
not_afk = filter_keyvals(afk_events, "status", ["not-afk"]);
window_events = filter_period_intersect(window_events, not_afk);
RETURN = window_events;

// Group by app
window_events = query_bucket(find_bucket("aw-watcher-window_"));
events_by_app = merge_events_by_keys(window_events, ["app"]);
RETURN = sort_by_duration(events_by_app);

// Filter by app name
window_events = query_bucket(find_bucket("aw-watcher-window_"));
code_events = filter_keyvals(window_events, "app", ["Code"]);
RETURN = code_events;

配置

该服务默认连接到位于 http://localhost:5600 的 ActivityWatch API。如果你的 ActivityWatch 实例运行在其他主机或端口上, 可以按照上文“覆盖 ActivityWatch 服务器主机/端口”一节所述进行覆盖。

故障排除

ActivityWatch 未运行

如果 ActivityWatch 未运行,该服务将显示连接错误。请 确保 ActivityWatch 正在运行,并可通过指定的主机/端口 地址访问(除非你已覆盖该地址,否则为 http://localhost:5600)。

查询错误

如果你遇到查询错误:

  1. 检查你的查询语法
  2. 确保存储桶 ID 正确
  3. 验证时间段内包含数据
  4. 查看 ActivityWatch 日志以了解更多详情
Claude/MCP 查询格式问题

如果 Claude 在通过此 MCP 服务运行查询时报告错误,很 可能是由于格式问题。请确保你的提示词中的查询遵循以下确切格式:

{
  "timeperiods": ["2024-10-28/2024-10-29"],
  "query": ["events = query_bucket('aw-watcher-window_UNI-qUxy6XHnLkk'); RETURN = events;"]
}

常见问题:

  • 时间段格式不正确(应为数组内单个字符串形式的 "start/end")
  • 查询语句被拆分为单独的数组元素,而不是合并 在一个字符串中
最常见的格式问题

最常见的错误是 Claude 将每条查询语句拆分为各自的 数组元素,如下所示:

{
  "query": [
    "browser_events = query_bucket('aw-watcher-web');",
    "afk_events = query_bucket('aw-watcher-afk');",
    "RETURN = events;"
  ],
  "timeperiods": ["2024-10-28/2024-10-29"]
}

这是不正确的。相反,所有语句都应位于 数组内的单个字符串中:

{
  "timeperiods": ["2024-10-28/2024-10-29"],
  "query": ["browser_events = query_bucket('aw-watcher-web'); afk_events = query_bucket('aw-watcher-afk'); RETURN = events;"]
}
向 Claude 编写提示词时

向 Claude 编写提示词时,请非常明确地说明格式并使用示例。例如,可以这样说:

"Run a query with timeperiods as ["2024-10-28/2024-10-29"] and query as ["statement1; statement2; RETURN = result;"]. Important: Make sure ALL query statements are in a single string within the array, not split into separate array elements."

贡献

欢迎贡献!请随时提交 Pull Request。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。