← 返回 Skills 市场
chenbaochao

Comulytic

作者 chenbaochao · GitHub ↗ · v1.0.3 · MIT-0
cross-platform ✓ 安全检测通过
186
总下载
0
收藏
0
当前安装
4
版本数
在 OpenClaw 中安装
/install comulytic
功能描述
Query Comulytic meetings, contacts, action items, and conversation history. Use when: user asks about meetings, notes, call summaries, contacts, pending task...
使用说明 (SKILL.md)

Comulytic Skill

Query meetings, contacts, action items, and conversations from Comulytic.

When to Use

USE this skill when:

  • "Show my recent meetings"
  • "What did we discuss with [person]?"
  • "Any overdue action items?"
  • "Search conversations about [topic]"
  • "Get the transcript for [meeting]"
  • "What's [contact]'s profile?"

When NOT to Use

DON'T use this skill when:

  • Scheduling new meetings → use calendar
  • Sending messages → use messaging tools
  • Editing contacts → use Comulytic app

Setup (one-time)

~/.openclaw/skills/comulytic/scripts/comulytic-login.py

User enters email + password, script auto-completes OAuth and saves the token.

Auth Token

Read the token before making any call. Check env var first, then file:

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"

If empty, tell the user to run the login command above, or set the COMULYTIC_MCP_TOKEN environment variable.

API Pattern

All calls use one endpoint with JSON-RPC 2.0. Always read the token first using the Auth Token pattern above:

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"TOOL","arguments":{ARGS}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Tools

meetings/search — Search meetings

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"

# Recent meetings
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"meetings/search","arguments":{"limit":10}}}' \
  | jq '.result.content[0].text' -r | jq '.'

# By keyword
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"meetings/search","arguments":{"query":"KEYWORD","limit":5}}}' \
  | jq '.result.content[0].text' -r | jq '.'

# By date range
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"meetings/search","arguments":{"date_from":"2025-03-01","date_to":"2025-03-31"}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: query, date_from/date_to (YYYY-MM-DD), contact_id, limit (max 50), cursor.

meetings/detail — Meeting detail or transcript

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"

# Summary
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"meetings/detail","arguments":{"meeting_id":"ID"}}}' \
  | jq '.result.content[0].text' -r | jq '.'

# Full transcript
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"meetings/detail","arguments":{"meeting_id":"ID","detail_level":"full"}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: meeting_id (required), detail_level (summary|detailed|full).

contacts/profile — Contact info

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"contacts/profile","arguments":{"contact_id":"ID","include_insights":true}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: contact_id (required), include_insights (boolean).

contacts/history — Meeting history with a contact

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"contacts/history","arguments":{"contact_id":"ID","limit":10}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: contact_id (required), date_from, limit (max 30).

conversations/search — Full-text search

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"conversations/search","arguments":{"query":"KEYWORD","limit":10}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: query (required), date_from/date_to, contact_id, limit (max 20).

actions/pending — Pending action items

COMULYTIC_MCP_TOKEN="${COMULYTIC_MCP_TOKEN:-$(python3 -c "import json; print(json.load(open('$HOME/.comulytic/mcp-token.json'))['access_token'])" 2>/dev/null)}"

# All pending
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"actions/pending","arguments":{"status":"pending","limit":20}}}' \
  | jq '.result.content[0].text' -r | jq '.'

# Overdue only
curl -s -X POST https://api.comulytic.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $COMULYTIC_MCP_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"actions/pending","arguments":{"status":"overdue"}}}' \
  | jq '.result.content[0].text' -r | jq '.'

Args: status (pending|overdue|all), contact_id, priority, limit (max 50).

Workflow

  1. meetings/search → find meetings → get meeting_id
  2. meetings/detail with meeting_id → get summary or transcript
  3. contacts/history with contact_id → all meetings with that person
  4. conversations/search → find what was said about a topic

Error Handling

  • If token read fails → tell user to run ~/.openclaw/skills/comulytic/scripts/comulytic-login.py
  • If API returns 401 → token expired, run login again
  • Empty results are normal (user has no matching data)
  • Never guess meeting_id or contact_id — always get from search results
安全使用建议
This skill appears to do what it says: it will prompt you for your Comulytic email/password once (via the included script) to obtain an OAuth token and then use that token (from an env var or ~/.comulytic/mcp-token.json) to call api.comulytic.ai. Before installing, verify you trust Comulytic and are comfortable entering credentials into the provided login script; the token is stored locally with restrictive permissions (600). Note the registry only auto-installs jq via brew — the instructions also expect curl and python3 to exist (common on most systems). If you ever want to revoke access, use the Comulytic account settings or remove ~/.comulytic/mcp-token.json. If you want extra assurance, review the provided Python script yourself before running it.
功能分析
Type: OpenClaw Skill Name: comulytic Version: 1.0.3 The comulytic skill bundle is a legitimate integration for querying meeting, contact, and task data from the Comulytic platform. It includes a standard OAuth 2.0 login script (comulytic-login.py) that handles credentials securely using getpass and stores tokens with restricted file permissions (0o600). All API interactions in SKILL.md and the login script are directed to the official domain api.comulytic.ai, and no evidence of data exfiltration, malicious execution, or prompt injection was found.
能力评估
Purpose & Capability
Name/description (querying meetings, contacts, transcripts) match the included code and runtime instructions. Required binaries (curl, jq, python3) are used by the curl/jq command examples and the provided Python login script.
Instruction Scope
Runtime instructions are limited to: reading a COMULYTIC_MCP_TOKEN from an environment variable or $HOME/.comulytic/mcp-token.json, prompting the user to run the provided login script if missing, and making JSON-RPC POSTs to https://api.comulytic.ai/mcp. The instructions do not attempt to read unrelated files or exfiltrate data to unexpected endpoints.
Install Mechanism
No external download URLs or risky installers are used. The registry lists only a brew formula for jq; SKILL.md also mentions apt packages for curl/python3/jq. This mismatch is benign but worth noting: install metadata only guarantees installing jq via brew, while the instructions assume curl and python3 are present (they usually are on most systems).
Credentials
The skill requests no global secrets; it optionally uses COMULYTIC_MCP_TOKEN and otherwise stores an OAuth token at ~/.comulytic/mcp-token.json (saved with 0o600 permissions). The login flow asks for email/password interactively to obtain an access token — this is consistent with the stated need to access user Comulytic data.
Persistence & Privilege
always is false and the skill does not attempt to modify other skills or system-wide settings. It writes a token file to ~/.comulytic/, which is expected and scoped to the user's home directory.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install comulytic
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /comulytic 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.3
Fix: login API path /api/kirby/v1/auth/login/email
v1.0.2
Fix: include scripts/comulytic-login.py in package
v1.0.1
Include scripts/comulytic-login in package
v1.0.0
Initial release of the Comulytic skill. - Enables querying of meetings, contacts, action items, and conversation history from Comulytic. - Provides reference commands for searching meetings, retrieving meeting details or transcripts, viewing contact info and history, searching full conversation text, and listing pending action items. - Clearly defines when to use (queries/searches) and not to use (scheduling, messaging, editing contacts) the skill. - Includes user authentication setup instructions and token management pattern. - Lists all required tools (curl, jq, python3) and provides platform-specific install steps.
元数据
Slug comulytic
版本 1.0.3
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 4
常见问题

Comulytic 是什么?

Query Comulytic meetings, contacts, action items, and conversation history. Use when: user asks about meetings, notes, call summaries, contacts, pending task... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 186 次。

如何安装 Comulytic?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install comulytic」即可一键安装,无需额外配置。

Comulytic 是免费的吗?

是的,Comulytic 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Comulytic 支持哪些平台?

Comulytic 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Comulytic?

由 chenbaochao(@chenbaochao)开发并维护,当前版本 v1.0.3。

💬 留言讨论