A remote, streamable-HTTP MCP server. Point any MCP client — Claude Code, Codex, or Claude.ai as a custom connector — at:
{ "pulse": {
"url": "https://pulse.transmit.work/api/mcp",
"headers": { "Authorization": "Bearer psk_..." }
} }
Return the authenticated user’s profile.
No parameters.
Returns Profile: id, name, email, role, team, experience, companyId, emailVerified, tools[].
pulse_list_entries
Read-only
List the caller’s own time entries, newest first, paginated.
Parameters
scope · "week" | "month" | "last_month"
Reporting period. Defaults to the current week (Mon–Sun).
limit · number
Max entries to return, 1–200. Default 50.
offset · number
Entries to skip, for pagination. Default 0.
Returns { scope, total, count, offset, limit, has_more, next_offset, items[] } — each item has id, date, category, categoryLabel, tool, project, description, start, end, durationMin, pauseMin, kind, source, note.
pulse_get_summary
Read-only
The caller’s balance for the period: minutes used vs. quota.
Parameters
scope · "week" | "month" | "last_month"
Reporting period. Defaults to the current week.
Returns { scope, usedMin, quotaMin, percentUsed, remainingMin, entryCount, timeUnit, categories[] } — categories[] is a per-category minutes breakdown, sorted descending.
pulse_list_categories
Read-only
List the workspace’s active activity categories.
No parameters.
Returns { items: [{ id, label, color }] }
pulse_update_category
WriteAdmin-only
Rename an activity category.
Parameters
category · string · required
Category id, or exact (case-insensitive) label.
label · string · required
New label.
Returns { ok: true, id, message }
pulse_list_projects
Read-only
List the projects assigned to the caller.
No parameters.
Returns { items: [{ id, name }] } — only projects assigned to the caller.
pulse_create_project
WriteAdmin-only
Create a new project on the workspace.
Parameters
name · string · required
Project name (e.g. "Migration"). Appended to the end of the active list.
Returns { ok: true, id, message } on success, or { isError: true } with a plain-text reason.
pulse_update_project
WriteAdmin-only
Rename a project. There’s no archive/delete tool for projects (or categories, or tools) — that’s an intentional, in-app-only action in Settings, not something an agent can do in one call.
Parameters
project · string · required
Project id, or exact (case-insensitive) name.
name · string
New name. Only fields you pass are changed.
Returns { ok: true, id, message }
pulse_list_members
Read-onlyAdmin-only
List workspace members.
No parameters.
Returns { items: [{ id, name, email, role, team, pending, emailVerified }] }. Errors for non-admin tokens.
Log a time entry on the caller’s own timesheet. Recorded directly and immediately visible — no approval step. Entries logged this way are tagged source: "agent".
Parameters
category · string · required
Prefer the readable label (e.g. "Dev") from pulse_list_categories — the id also works.
tool · string · required
Prefer the readable label (e.g. "Claude Code") from pulse_list_tools — the id also works.
description · string · required
What the work was.
durationMin · number · required
Duration in minutes.
date · string · required
YYYY-MM-DD — the day the work happened. Not defaulted, so a backfilled entry never gets silently dated to today.
start · string
Optional start time, HH:MM.
end · string
Optional end time, HH:MM.
note · string
Optional free-text note — e.g. a PR URL or issue id, for traceability.
project · string
Project label or id. Sets project attribution in the same call.
Returns { ok: true, id, message: "Entry logged." }
Update fields on an existing entry owned by the caller. Only the fields you pass change.
Parameters
entry_id · string · required
The entry id, from pulse_list_entries.
category · string
New category — label or id.
tool · string
New tool — label or id.
project · string | null
New project — label or id; pass null to clear.
description · string
New description.
durationMin · number
New duration in minutes.
start · string | null
HH:MM, or null to clear.
end · string | null
HH:MM, or null to clear.
note · string | null
Or null to clear.
Returns { ok: true, id, message: "Entry updated." }
The six work-memory tools below are opt-in, and scoped by role. They’re off for new workspaces. An admin enables the feature under Settings → Lab → Work memory (Off / Admins only / Everyone), and sets separately, under Agent capture, whose agents may use these tools — so a workspace can let every engineer’s agent file suggestions while only admins review them. While a token’s role is excluded the tools don’t appear in tools/list at all (rather than appearing and failing), and the REST endpoints return 403 — or 404 when the feature is off for the whole workspace. If your agent can’t see them, those settings are why.
pulse_suggest_memory
Write
Propose something durable the agent noticed while working — a decision made, a constraint discovered, a migration completed. It lands as status: "suggested" for a human to confirm, edit, or dismiss in the app, so it is safe to offer one when unsure. Routine activity (typo fixes, running tests, ordinary commits) should never produce a memory — the timeline is already exhaustive; memory stays selective.
Parameters
type · string · required
decision | learning | outcome | milestone | blocker.
title · string · required
The decision or lesson itself, stated plainly.
summary · string · required
A sentence or two that still makes sense out of context.
detail · string
Longer context — alternatives weighed, caveats, links.
occurredOn · string · required
YYYY-MM-DD — the day it happened.
project · string
Project name or id. Omit for a workspace-level memory.
confidence · number
0-1 or 0-100.
entryIds · string[]
Ids of the caller’s own entries this came from, for provenance.
Returns { ok: true, id, status: "suggested", message }
Save a memory directly as confirmed. Only for when the user explicitly asked to remember something (“remember that we chose Vercel”) — an inference the agent made on its own belongs in pulse_suggest_memory.
Parameters
Same as pulse_suggest_memory, minus
confidence.
Returns { ok: true, id, status: "confirmed", message }
pulse_list_memories
Read-only
The workspace’s durable knowledge, newest first. Returns confirmed memories by default, so an agent reading back gets settled decisions rather than untriaged guesses. Only confirmed memories are workspace-wide; suggestions stay visible to whoever captured them (and admins).
Parameters
status · string
confirmed (default) | suggested | dismissed | any.
type · string
Filter to one kind.
project · string
Project name or id.
from · string
Earliest occurredOn (YYYY-MM-DD).
to · string
Latest occurredOn (YYYY-MM-DD).
limit · number
Default 50, max 200.
offset · number
For pagination.
Returns { total, count, offset, limit, has_more, next_offset, items } — each item carries its provenance: type, title, summary, detail, status, confidence, occurredOn, project, createdBy { userId, name, source }, and entryIds.
pulse_search_memories
Read-only
Keyword search across title, summary, and detail — for questions like “what did we learn about Supabase auth?”. Matching is keyword-based, not semantic: it returns candidates generously and the calling model does the ranking.
Parameters
query · string · required
Keywords. Prefer distinctive nouns over a full sentence.
status · string
any (default) | confirmed | suggested | dismissed.
type · string
Filter to one kind.
project · string
Project name or id.
from · string
Earliest occurredOn (YYYY-MM-DD).
to · string
Latest occurredOn (YYYY-MM-DD).
limit · number
Default 25, max 200.
offset · number
For pagination.
Returns { query, total, count, offset, limit, has_more, next_offset, items }
Refine a memory the caller captured that a human hasn’t confirmed yet. Once confirmed it is the team’s record, and only an admin can change it.
Parameters
memory_id · string · required
The memory id, from pulse_list_memories.
summary · string
New summary.
detail · string | null
Or null to clear.
occurredOn · string
YYYY-MM-DD.
project · string | null
Name or id; null to clear.
confidence · number
0-1 or 0-100.
Returns { ok: true, id, message: "Memory updated." }
pulse_dismiss_memory
Write
Retract a suggestion that turned out to be wrong. Works only on the caller’s own memories that nobody has confirmed yet, and sets status: "dismissed" rather than deleting anything.
Parameters
memory_id · string · required
The memory id.
Returns { ok: true, id, message: "Memory dismissed." }
There is no pulse_confirm_memory — by design. Confirming is what turns an agent’s inference into organizational truth that future agents read back as settled fact, so it stays a deliberate in-app action (the same way deleting an entry does). An agent can still retract its own untriaged suggestion with pulse_dismiss_memory.
No delete tool exists, by design — every entry an agent writes stays visible and editable, never silently removed.