← Back to Skills Marketplace
chenbaochao

Comulytic

by chenbaochao · GitHub ↗ · v1.0.3 · MIT-0
cross-platform ✓ Security Clean
186
Downloads
0
Stars
0
Active Installs
4
Versions
Install in OpenClaw
/install comulytic
Description
Query Comulytic meetings, contacts, action items, and conversation history. Use when: user asks about meetings, notes, call summaries, contacts, pending task...
README (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
Usage Guidance
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.
Capability Analysis
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.
Capability Assessment
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.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install comulytic
  3. After installation, invoke the skill by name or use /comulytic
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
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.
Metadata
Slug comulytic
Version 1.0.3
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 4
Frequently Asked Questions

What is Comulytic?

Query Comulytic meetings, contacts, action items, and conversation history. Use when: user asks about meetings, notes, call summaries, contacts, pending task... It is an AI Agent Skill for Claude Code / OpenClaw, with 186 downloads so far.

How do I install Comulytic?

Run "/install comulytic" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Comulytic free?

Yes, Comulytic is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Comulytic support?

Comulytic is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Comulytic?

It is built and maintained by chenbaochao (@chenbaochao); the current version is v1.0.3.

💬 Comments