Skip to main content
Glama
ZeroHrs MCP server

ZeroHrs MCP server

Official
by ZeroHrs-Org

ZeroHrs MCP server

This public local MCP server gives Codex access to the signed-in user's Zero data through the same user-scoped API paths used by Zero's OpenClaw agent.

For a shareable, agent-oriented installation guide, see INSTALL.md.

Install in Codex

Requires Node.js 20 or newer. Inspect any existing zerohrs entry before replacing it, then install the pinned public release:

codex mcp add zerohrs -- npx -y github:ZeroHrs-Org/zerohrs-mcp#v0.3.0

Set default_tools_approval_mode = "writes" for this server in ~/.codex/config.toml, restart Codex, and call the login tool with no arguments.

Related MCP server: SceneBoard MCP for Codex

OpenClaw-compatible tools

The MCP includes these names from Zero's OpenClaw agent:

  • search_zero

  • search_contacts

  • add_contact

  • get_meetings

  • get_transcripts

  • get_meeting_transcript_by_id

  • get_user_owned_tasks

  • create_user_owned_task

  • insert_prep_notes_for_meeting

  • replace_generated_prep_notes_for_meeting

  • schedule_meeting_bot

  • get_morning_brief_by_date

It also keeps these focused MCP convenience tools:

  • list_meetings

  • list_transcripts

  • search_transcripts

  • get_transcript

  • list_tasks

  • get_task

  • get_meeting_prep

  • create_task

  • update_task

  • add_meeting_prep_note

The remaining tools are login and disconnect, for a total of 24.

Codex asks for approval before writes and external actions. schedule_meeting_bot is an external action and should only run after an explicit user request. add_contact may update an existing contact with the same email, update_task overwrites selected task fields, and generated-prep replacement removes the prior generated notes before saving the replacement. The server intentionally excludes email, messaging, transcript sharing, direct record-deletion tools, onboarding, runtime control, and administrator tools. The internal generated-morning-brief replacement tool is also excluded because its claim-token workflow is not a public user action.

get_transcript returns the transcript summary by default. It can include linked tasks and query-matched speaker blocks, but it never loads every transcript turn by default.

Hosted login

The MCP runs locally over STDIO and does not require a token or Google client configuration at startup.

Call login with no arguments. It returns a short-lived loopback URL on http://127.0.0.1:3100. The local page opens the hosted sign-in at https://app.meetzero.ai/mcp/login in the system browser.

The hosted page signs the user in with Zero's Google client, creates a single-use authorization code, and returns only that code and the original state to the loopback callback. The local MCP exchanges the code with its private PKCE verifier, validates the returned MCP-scoped session through /auth/profile, and saves it locally. Google credentials and Zero session tokens never pass through Codex chat or browser callback URLs.

Public users do not need GOOGLE_WEB_CLIENT_ID, a repository checkout, or any ZeroHrs environment file.

For local or staging development only:

  • ZEROHRS_MCP_LOGIN_URL overrides the hosted sign-in page. Remote values must use HTTPS. HTTP is accepted only for loopback hosts.

  • ZEROHRS_MCP_LOGIN_PORT changes the local callback port.

  • ZEROHRS_API_BASE_URL changes the control-plane destination before Codex starts.

After sign-in, only the validated MCP-scoped token is saved at ~/.zerohrs/codex-mcp-session.json with 0600 permissions. Call disconnect to cancel a pending login and remove that local credential. It does not revoke the token or sign out other Zero sessions.

Do not add a session token to .codex/config.toml, a committed .env file, chat, or shell history.

Restart Codex after initially adding or updating the MCP server, then use /mcp to confirm that zerohrs and its tools are available.

Development

pnpm --filter @zerohrs/mcp build
pnpm --filter @zerohrs/mcp test
pnpm --filter @zerohrs/mcp typecheck

Available Tools

24 tools
add_contactAdd Zero ContactA
Destructive

Add a contact for the signed-in user. Call only after the user explicitly asks to save the contact.

Inputs: name (required), email (required).

add_meeting_prep_noteAdd Zero Meeting Prep NoteA

Save one manual prep note for a user-accessible meeting. This does not send messages or schedule a bot.

Inputs: note_text (required), meeting_id (required).

create_taskCreate Zero TaskB

Create a Zero task for the signed-in user. Call only after the user explicitly asks to save the task.

Inputs: title (required), description (required), status, due_date, +1 more.

create_user_owned_taskCreate User-Owned Zero TaskB

OpenClaw-compatible Zero task creation. Call only after the user explicitly asks to save the task.

Inputs: title (required), description (required), status, due_date, +1 more.

disconnectDisconnect ZeroHrsA
DestructiveIdempotent

Remove the session saved by this local MCP. This does not revoke or sign out other ZeroHrs sessions.

Inputs: no named parameters.

get_meeting_prepGet Zero Meeting PrepA
Read-onlyIdempotent

Get a meeting record with the signed-in user's private prep notes and people.

Inputs: meeting_id (required).

get_meetingsGet Zero MeetingsB
Read-onlyIdempotent

OpenClaw-compatible meeting lookup for the signed-in user, with status, title, and time filters.

Inputs: after, limit, query, before, +1 more.

get_meeting_transcript_by_idGet Zero Transcript by IDA
Read-onlyIdempotent

OpenClaw-compatible transcript lookup by id. It returns the summary, optional tasks, and only query-matched speaker blocks.

Inputs: transcriptId (required), include_tasks (required), include_turns (required), query.

get_morning_brief_by_dateGet Zero Morning BriefA
Read-onlyIdempotent

Read the signed-in user's Zero morning brief for one local calendar date.

Inputs: local_date (required).

get_taskGet Zero TaskA
Read-onlyIdempotent

Get one user-accessible Zero task by id.

Inputs: task_id (required).

get_transcriptGet Zero TranscriptA
Read-onlyIdempotent

Get a transcript summary by id. Optionally include linked tasks and query-matched speaker blocks with adjacent context. This never loads every transcript turn.

Inputs: transcript_id (required), turn_limit, turn_query, include_tasks.

get_transcriptsGet Zero TranscriptsB
Read-onlyIdempotent

OpenClaw-compatible search across transcript titles and summaries without full turns.

Inputs: query (required), after, limit, before.

get_user_owned_tasksGet User-Owned Zero TasksB
Read-onlyIdempotent

OpenClaw-compatible search across the signed-in user's Zero task title and description.

Inputs: q, after, limit, before.

insert_prep_notes_for_meetingInsert Zero Meeting Prep NoteC

OpenClaw-compatible manual prep note creation for a user-accessible meeting.

Inputs: note_text (required), meeting_id (required).

list_meetingsList Zero MeetingsA
Read-onlyIdempotent

List the signed-in user's stored meetings, optionally filtered by status, title text, or time window.

Inputs: q, after, limit, before, +1 more.

list_tasksList Zero TasksA
Read-onlyIdempotent

List or search the signed-in user's Zero tasks by title and description, optionally narrowed by time window.

Inputs: q, after, limit, before.

list_transcriptsList Zero TranscriptsA
Read-onlyIdempotent

List recent transcript records without loading transcript turns. Use before or after to narrow the time window.

Inputs: after, limit, before.

loginLog In to ZeroHrsA

Start a private browser sign-in for this local MCP. No session token passes through Codex chat.

Inputs: no named parameters.

replace_generated_prep_notes_for_meetingReplace Generated Zero Meeting PrepA
Destructive

Replace generated prep notes and verified attendee briefings for a user-accessible meeting. Call only when the user explicitly asks the agent to generate or replace meeting prep.

Inputs: result (required), meeting_id (required), people.

schedule_meeting_botSchedule Zero Meeting BotB

Schedule the signed-in user's Zero meeting bot for a link or provider. Call only after the user explicitly asks to schedule the bot.

Inputs: title, join_at, provider, meeting_url, +1 more.

search_contactsSearch Zero ContactsA
Read-onlyIdempotent

Search the signed-in user's Zero contacts by up to 10 names or email addresses. Results stay in query order.

Inputs: queries (required), page, limit.

search_transcriptsSearch Zero TranscriptsA
Read-onlyIdempotent

Search transcript titles and summaries without loading full transcript bodies.

Inputs: q (required), limit.

search_zeroSearch ZeroA
Read-onlyIdempotent

Search the signed-in user's stored Zero meetings, tasks, transcript speaker blocks, contacts, prep notes, and morning briefs.

Inputs: q (required), after, before, limit_per_source.

update_taskUpdate Zero TaskA
Destructive

Update editable fields on a user-accessible Zero task. Call only after the user explicitly requests the change.

Inputs: task_id (required), title, status, due_date, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 24 tools

    Disambiguation2/5

    Several tools have near-identical purposes, especially the OpenClaw-compatible aliases: search_transcripts/get_transcripts, get_transcript/get_meeting_transcript_by_id, list_meetings/get_meetings, create_task/create_user_owned_task, and add_meeting_prep_note/insert_prep_notes_for_meeting. An agent can easily misselect between these pairs despite slightly different descriptions.

    Naming Consistency3/5

    Tool names consistently use lowercase snake_case verb_noun, but verbs are not semantically consistent: list vs search for similar retrieval, create vs add vs insert for creation, and get_meetings vs list_meetings for the same operation. The style is predictable, but the duplicate action names break the pattern.

    Tool Count3/5

    24 tools is at the high end of the range and feels bloated because six or more are redundant OpenClaw-compatible variants of existing tools. A leaner set of unique capabilities would be around 16-18 tools.

    Completeness3/5

    Core resources (meetings, transcripts, tasks, contacts, prep notes, morning briefs) have reasonable read/create/update coverage, but there are notable gaps: no delete for tasks or contacts, no update/delete for contacts, and no delete for individual prep notes. Agents would hit dead ends when users ask to remove or modify existing data.

    Maintenance

    ActivityNo data
    ResponsivenessSyncing

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables Codex to create, update, review, and present live SceneBoard boards after user approves a one-time connection.
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables MCP clients like Codex and Claude Code to securely read and manage a personal Cronometer account, including food logs, nutrient summaries with missing-data awareness, food search, biometrics, and export analysis.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Lets Codex delegate coding and repository work to an installed Claude Code CLI with permission-aware inspect/write access, model and effort selection, resumable and cloud-attached sessions, and durable synchronous or asynchronous jobs.
      MIT