Skip to main content

Rize MCP Server

The Rize MCP server lets AI assistants like Claude and ChatGPT read and write your Rize data — time entries, clients, projects, and tasks — directly from the chat window. It speaks the Model Context Protocol, so any MCP-compatible client can connect.

info

Rize MCP is listed in the major MCP directories including Claude's MCP directory and the Official MCP Registry.

Quickstart

  1. Add the connector. In Claude Desktop: Settings → Connectors → Add custom connector. Paste https://mcp.rize.io/mcp as the URL.
  2. Authorize. Claude opens a browser to sign in to Rize. Sign in, review the requested permissions, and approve.
  3. Try a prompt. Ask Claude "How much time did I track today?" or "Show me my pending time entry suggestions."

That's it. Claude now has 23 tools to read and write your Rize data.

Connection

SettingValue
Server URLhttps://mcp.rize.io/mcp
TransportStreamable HTTP
AuthenticationOAuth 2.0 (authorization code + PKCE)
Discovery metadatahttps://mcp.rize.io/.well-known/oauth-authorization-server

Dynamic client registration is supported — clients that follow RFC 7591 (Claude Desktop, Claude Code, Cursor, Zed, etc.) register themselves automatically the first time you connect.

Authentication

The server uses OAuth 2.0 authorization code flow with PKCE. Here's what happens on first connection:

  1. Your MCP client asks the server for a client registration.
  2. The client opens your browser to https://app.rize.io/oauth/mcp/signin to authenticate you.
  3. You sign in with "Continue with Google" or magic link — the same way you sign in to Rize normally.
  4. Rize shows a consent screen listing what the AI assistant will be able to read and write.
  5. After you approve, the browser redirects back to your MCP client with an authorization code.
  6. Your MCP client exchanges the code for an access token and uses it on every request.

Access tokens expire after 2 hours. Refresh tokens are long-lived, so you'll only need to re-authorize if you explicitly disconnect or revoke access from Rize's account settings.

Scopes

ScopeWhat the assistant can do
readList and read your time entries, clients, projects, tasks, and team membership.
writeCreate, update, and delete the above within your workspace. Approve or reject AI-generated time entry suggestions.

The server operates entirely within your own Rize workspace. It cannot access other users' data.

Setup per client

Claude Desktop / Claude.ai

  1. Open Settings → Connectors.
  2. Click Add custom connector.
  3. Enter:
    • Name: Rize
    • URL: https://mcp.rize.io/mcp
  4. Click Add. The Rize connector appears in your connector list.
  5. Click Connect next to Rize. A browser window opens.
  6. Sign in with Continue with Google or your Rize magic link, then approve the permissions.
  7. Return to Claude — the Rize tools are now available in any chat.

Claude Code

  1. Register the server:

    claude mcp add --transport http rize https://mcp.rize.io/mcp

    Or drop a .mcp.json in your project root:

    {
    "mcpServers": {
    "rize": {
    "type": "http",
    "url": "https://mcp.rize.io/mcp"
    }
    }
    }
  2. Start (or restart) a Claude Code session so it picks up the new server.

  3. Run /mcp — you'll see rize listed with status Needs authentication.

  4. Select rize and choose Authenticate. A browser window opens.

  5. Sign in with Continue with Google or your Rize magic link, then approve. The page will say Authorization successful — you can close it.

  6. Back in Claude Code, run /mcp again to confirm rize is connected. The Rize tools are now ready to use.

Codex (OpenAI)

Add Rize to your project's .mcp.json:

{
"mcpServers": {
"rize": {
"type": "url",
"url": "https://mcp.rize.io/mcp"
}
}
}

Run codex and authenticate when prompted. Rize tools are available immediately after authorization.

ChatGPT

  1. Open Settings → Apps.
  2. Search for Rize or click Add App.
  3. Enter the MCP server URL: https://mcp.rize.io/mcp
  4. Authorize with Continue with Google or your Rize magic link, then approve.
  5. You'll land back in ChatGPT with the Rize connector attached and ready to use in any chat.

Gemini CLI

Add Rize to your Gemini CLI settings.json (either the global ~/.gemini/settings.json or the project-scoped .gemini/settings.json):

{
"mcpServers": {
"rize": {
"httpUrl": "https://mcp.rize.io/mcp"
}
}
}

Start gemini in your project and Gemini will open a browser window for the OAuth flow the first time a Rize tool is called. For the latest Gemini MCP configuration options, see the Gemini CLI docs.

Zed

Zed currently runs MCP servers as stdio child processes and doesn't speak remote HTTP directly. Use the mcp-remote adapter to bridge the two in ~/.config/zed/settings.json:

{
"context_servers": {
"rize": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.rize.io/mcp"],
"env": {}
}
}
}

mcp-remote opens a browser for OAuth on first run and caches the token locally.

Any other MCP client

Any client that speaks the Model Context Protocol and supports Streamable HTTP with OAuth 2.0 can connect directly. This includes Cursor, Continue, and anything built on the official MCP SDKs. Clients that only support stdio (like Zed today) can bridge via mcp-remote — see the Zed example above.

Point the client at https://mcp.rize.io/mcp — OAuth (including dynamic client registration) is negotiated automatically. A typical config entry looks like:

{
"mcpServers": {
"rize": {
"url": "https://mcp.rize.io/mcp"
}
}
}

If your client doesn't support OAuth discovery yet, check its documentation for how to add a remote MCP server — most use some variant of the snippet above. The exact key names (url, httpUrl, transport, etc.) differ per client.

Tools overview

The server exposes 24 tools. Jump to Tool reference for parameters and return shapes.

Time entries

ToolPurpose
list_my_time_entriesYour time entries for a date range.
list_team_time_entriesAll team members' entries (admin only).
get_time_entryFull details of one entry by ID.
create_time_entryLog a new entry.
update_time_entryEdit times, title, entity assignments, or billing.
delete_time_entryRemove an entry.

AI suggestions

ToolPurpose
generate_time_entriesAsk the AI to fill in entries for a date range based on your tracked activity.
regenerate_time_entryRe-run generation on a pending or failed entry, optionally with custom guidance.
approve_time_entriesAccept pending AI suggestions, optionally assigning a client/project/task.
reject_time_entriesDismiss pending AI suggestions.
approve_tag_suggestionAccept an AI-suggested client/project/task tag on an entry.

Analytics

ToolPurpose
get_my_time_allocationYour hours grouped by client, project, or task.
get_team_time_allocationTeam-wide allocation (admin only).
list_my_apps_usedYour app and website usage for a date range.

Clients

ToolPurpose
list_clientsList clients and their hourly rates.
create_clientAdd a new client.
update_clientEdit a client's name, rate, color, or status.

Projects

ToolPurpose
list_projectsList projects.
create_projectAdd a new project, optionally under a client.
update_projectEdit a project's name, client, color, or status.

Tasks

ToolPurpose
list_tasksList tasks.
create_taskAdd a new task, optionally under a project.
update_taskEdit a task's name, project, assignee, color, or status.

Team

ToolPurpose
invite_team_memberInvite a new member by email (admin only).

Tool reference

list_my_time_entries

List the current user's own time entries for a date range. Returns all statuses by default (active, pending, generating, failed). Sorted by start time with client/project/task details and formatted durations.

ParameterTypeRequiredDescription
datestringyesStart date in YYYY-MM-DD format.
end_datestringnoEnd date in YYYY-MM-DD format. Defaults to date for a single-day query.
statusesarray<enum>noOne or more of active, pending, generating, failed, rejected. Defaults to all non-rejected.
client_idsarray<string>noFilter by client IDs.
project_idsarray<string>noFilter by project IDs.
task_idsarray<string>noFilter by task IDs.
team_idstringnoFilter by team. Defaults to the user's default workspace.
limitnumbernoMax entries (1–500, default 100).
cursorstringnoPagination cursor from a previous response.

Returns { entries, count, has_more, next_cursor }.

list_team_time_entries

List time entries across all team members (team admin only). Non-admins see only their own entries.

ParameterTypeRequiredDescription
datestringyesStart date in YYYY-MM-DD format.
end_datestringnoEnd date. Defaults to date.
creator_emailsarray<string>noFilter to specific team members by email.
creator_idsarray<string>noFilter by identity ID.
statusesarray<enum>noSee list_my_time_entries.
client_idsarray<string>noFilter by client IDs.
project_idsarray<string>noFilter by project IDs.
task_idsarray<string>noFilter by task IDs.
team_idstringnoFilter by team.
limitnumbernoMax entries (1–500, default 100).
cursorstringnoPagination cursor.

Returns { entries, count, has_more, next_cursor }.

get_time_entry

Fetch a single time entry by ID with full details including client, project, task, billing info, and AI confidence data.

ParameterTypeRequiredDescription
idstringyesThe time entry ID.

Returns the full time entry object, or { error: "NOT_FOUND" } if the ID doesn't exist.

create_time_entry

Create a new time entry with optional client, project, and task assignment. Times must be in ISO 8601 format — convert user-local times to their timezone (available as _user_timezone in every response) before sending.

ParameterTypeRequiredDescription
start_timestringyesISO 8601 start time (e.g. 2024-01-15T09:00:00Z).
end_timestringyesISO 8601 end time.
titlestringnoTitle for the entry.
descriptionstringnoDescription of work performed.
client_idstringnoClient to assign.
project_idstringnoProject to assign.
task_idstringnoTask to assign.
team_idstringnoTeam. Defaults to the user's default workspace.
billablebooleannoWhether this entry is billable.
idempotency_keystringnoUnique key to prevent duplicate entries on retry. Recommended for all creates.

Returns the created time entry object.

Example

{
"start_time": "2024-01-15T14:00:00-05:00",
"end_time": "2024-01-15T15:30:00-05:00",
"title": "Client review meeting",
"client_id": "42",
"project_id": "187",
"billable": true,
"idempotency_key": "meeting-2024-01-15-acme"
}

update_time_entry

Update an existing time entry. Supports changing times, title, description, billing, and entity reassignment. Changing team_id clears entity assignments.

ParameterTypeRequiredDescription
idstringyesThe time entry ID to update.
start_timestringnoNew ISO 8601 start time.
end_timestringnoNew ISO 8601 end time.
titlestringnoNew title.
descriptionstringnoNew description.
client_idstringnoReassign to this client.
project_idstringnoReassign to this project.
task_idstringnoReassign to this task.
team_idstringnoMove to this team (clears entity assignments).
billablebooleannoSet billable status.

Returns the updated time entry object.

delete_time_entry

Delete a time entry by ID. Works on entries of any status.

ParameterTypeRequiredDescription
idstringyesThe time entry ID to delete.

Returns the deleted time entry object.

generate_time_entries

Generate AI time entries for a date range. Analyzes your tracked apps, websites, and meetings, then clusters them into multiple entries based on natural activity groups. Skips time slots where previous entries were rejected unless retry_rejected is set.

ParameterTypeRequiredDescription
start_timestringyesISO 8601 start time.
end_timestringyesISO 8601 end time.
team_idstringnoTeam. Defaults to the user's default workspace.
retry_rejectedbooleannoIf true, also generate entries in time slots that were previously rejected. Default false.

Returns { entries, count, note }. Generation is asynchronous — poll list_my_time_entries with statuses: ["pending", "generating"] to check status.

Rate limit: 15 calls per minute.

regenerate_time_entry

Regenerate AI content for a pending or failed time entry. Useful when generation failed or you want a better title/description. Optionally provide custom instructions.

ParameterTypeRequiredDescription
idstringyesThe time entry ID to regenerate.
instructionsstringnoCustom instructions to guide the AI (e.g. "focus on the meeting with Client X").

Returns the updated time entry object with a note about async completion.

Rate limit: max 3 regenerations per entry, 15 calls per minute.

approve_time_entries

Approve pending AI-generated time entry suggestions, making them active. Optionally assign client/project/task during approval in one operation.

ParameterTypeRequiredDescription
idsarray<string>yesTime entry IDs to approve (at least one).
client_idstringnoAssign this client to all approved entries.
project_idstringnoAssign this project to all approved entries.
task_idstringnoAssign this task to all approved entries.

Returns { approved, count }.

reject_time_entries

Reject pending AI-generated time entry suggestions. Rejected entries are kept in the database but hidden from active views.

ParameterTypeRequiredDescription
idsarray<string>yesTime entry IDs to reject.

Returns { rejected, count }.

approve_tag_suggestion

Approve an AI-suggested client, project, or task tag on a time entry. Tag suggestions appear on pending entries as inline recommendations with confidence scores.

ParameterTypeRequiredDescription
idstringyesThe tag suggestion ID to approve.

Returns { id, tag_type, tag_id, tag_name, status, confidence_score, reasoning }.

list_my_apps_used

List the apps and websites the current user has used during a date range. Returns app names, URLs, window titles, and usage durations. This tool is useful for AI assistants that want to understand what work was done during a time period without relying solely on time entry descriptions.

ParameterTypeRequiredDescription
datestringyesStart date in YYYY-MM-DD format.
end_datestringnoEnd date. Defaults to date.
team_idstringnoFilter by team.

Returns { apps, count } where each app includes name, total duration, and usage details.

get_my_time_allocation

Get the current user's own time allocation summary grouped by client, project, or task.

ParameterTypeRequiredDescription
datestringyesStart date in YYYY-MM-DD format.
end_datestringnoEnd date. Defaults to date.
group_byenumnoOne of client, project, task. Default client.
client_idsarray<string>noFilter by client IDs.
project_idsarray<string>noFilter by project IDs.
task_idsarray<string>noFilter by task IDs.
team_idstringnoFilter by team.
statusesarray<enum>noDefault ["active"].

Returns total hours, billable hours, and a breakdown by grouping.

get_team_time_allocation

Get time allocation summary across all team members (team admin only). Same parameters as get_my_time_allocation, plus:

ParameterTypeRequiredDescription
creator_emailsarray<string>noFilter to specific team members by email.
creator_idsarray<string>noFilter by identity ID.

list_clients

List clients with their hourly rates and team associations.

ParameterTypeRequiredDescription
statusesarray<string>noDefault ["active"].
limitnumbernoMax clients (1–100, default 50).
cursorstringnoPagination cursor.

Returns { clients, count, has_more, next_cursor }.

create_client

Create a new client. Clients are top-level entities that projects and time entries can attach to.

ParameterTypeRequiredDescription
namestringyesClient name.
hourly_ratenumbernoDefault hourly rate for billing.
colorstringnoColor hex (e.g. #FF5733).
team_namestringnoTeam to associate with. Defaults to the user's default team.

Returns the created client.

update_client

Update a client's name, hourly rate, color, or status.

ParameterTypeRequiredDescription
idstringyesThe client ID.
namestringnoNew name.
hourly_ratenumbernoNew hourly rate.
colorstringnoNew color hex.
statusstringnoNew status (e.g. active, archived).

Returns the updated client.

list_projects

List projects with their client associations.

ParameterTypeRequiredDescription
client_idstringnoFilter by client ID.
statusesarray<string>noDefault ["in_progress", "completed"].
limitnumbernoMax projects (1–100, default 50).
cursorstringnoPagination cursor.

Returns { projects, count, has_more, next_cursor }.

create_project

Create a new project, optionally under a client.

ParameterTypeRequiredDescription
namestringyesProject name.
client_idstringnoExisting client ID to associate with.
client_namestringnoClient name — creates the client if it doesn't exist.
colorstringnoColor hex.
team_namestringnoTeam. Defaults to the user's default team.

Returns the created project.

update_project

Update a project's name, client, color, or status.

ParameterTypeRequiredDescription
idstringyesThe project ID.
namestringnoNew name.
client_idstringnoNew client ID.
client_namestringnoNew client name (creates if missing).
colorstringnoNew color hex.
statusstringnoNew status (e.g. in_progress, completed, archived).

Returns the updated project.

list_tasks

List tasks with their project and assignee associations.

ParameterTypeRequiredDescription
statusesarray<string>noDefault ["in_progress", "completed"].
limitnumbernoMax tasks (1–100, default 50).
cursorstringnoPagination cursor.

Returns { tasks, count, has_more, next_cursor }.

create_task

Create a new task, optionally under a project. Tasks are the finest-grained unit of work and can be assigned to team members.

ParameterTypeRequiredDescription
namestringyesTask name.
project_idstringnoExisting project ID.
project_namestringnoProject name — creates the project if missing.
assignee_emailstringnoTeam member email. Defaults to the authenticated user.
colorstringnoColor hex.
team_namestringnoTeam. Defaults to the user's default team.

Returns the created task.

update_task

Update a task's name, project, assignee, color, or status.

ParameterTypeRequiredDescription
idstringyesThe task ID.
namestringnoNew name.
project_idstringnoNew project ID.
project_namestringnoNew project name (creates if missing).
assignee_emailstringnoNew assignee email.
colorstringnoNew color hex.
statusstringnoNew status.

Returns the updated task.

invite_team_member

Invite a new member to a team by email. Sends an invitation email. Requires team admin permissions. Naturally idempotent — re-inviting an existing member returns the existing record.

ParameterTypeRequiredDescription
team_idstringyesTeam ID.
emailstringyesEmail of the person to invite.
namestringnoName of the person being invited.
roleenumnoOne of member, admin. Default member.

Returns the created or existing team member.

Rate limits

  • 100 requests per minute per user across all tools.
  • generate_time_entries: 15 requests per minute (tighter because each call spawns an AI job).
  • regenerate_time_entry: 15 requests per minute, with a max of 3 regenerations per entry.

Exceeding a limit returns a RATE_LIMITED error with a retry_after_seconds hint so your assistant knows exactly when to try again.

Error handling

All tool errors return a JSON object with an error field. Assistants should surface the message and retry where appropriate.

CodeMeaningHow an assistant should react
AUTHENTICATION_ERRORToken missing, expired, or invalid.Prompt the user to re-authorize the connector.
AUTHORIZATION_ERRORUser lacks permission (e.g. non-admin calling a team-wide tool).Explain the permission gap; don't retry.
RATE_LIMITEDRate limit hit.Wait retry_after_seconds, then retry.
VALIDATION_ERROROne or more inputs failed server-side validation.Show messages to the user and correct them.
NOT_FOUNDThe requested record doesn't exist or isn't visible.Don't retry; ask the user for a valid ID.
SUBSCRIPTION_ERRORWorkspace plan doesn't allow this action.Surface the billing message; don't retry.
HTTP_5xx / INTERNAL_ERRORTransient server error.Retry once; if it repeats, surface the message.

Troubleshooting

"Not authenticated" on every call — Your token expired or was revoked. Open the connector settings and sign in again.

OAuth browser opens but doesn't redirect back — Some browsers block automatic redirects to localhost. Try completing the flow in Chrome or Edge.

generate_time_entries returns no entries — Rize only generates entries from tracked activity. If the desktop app wasn't running during the target range, or the range is too short (under 30 minutes), generation may produce nothing. Try a full workday.

"Admin only" errors on team toolslist_team_time_entries, get_team_time_allocation, and invite_team_member require team admin. Use the _my_ variants instead, or ask an admin.

Stale tool list after update — Claude Desktop occasionally caches the tool list. Fully quit and relaunch the app, then re-open a chat.

Example prompts

  • "How much time did I track today?"
  • "Show me my pending suggestions and approve them."
  • "What's my time allocation this week grouped by project?"
  • "Create a time entry from 9am to 10am titled 'Team standup'."

Support