Skip to main content
Glama
ZeroHrs-Org

ZeroHrs MCP server

Official
by ZeroHrs-Org
README.md
# 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.md).

## Install in Codex

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

```sh
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.

## 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

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

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

ActivityMaintained
ResponsivenessNo issues