Rivets
Documentation

MCP server

Rivets is an MCP server. Anything you can do with tasks in the app, an agent can do over MCP: list repositories, start a task, read what the agent did, commit, open a pull request, and merge. Every call acts as you, in one organization, with your repository access.

Endpoint

https://app.rivets.dev/api/mcp
  • Transport: Streamable HTTP, stateless. Send one JSON-RPC request per POST. There are no sessions.
  • Protocol version: 2025-06-18. Clients that still speak 2025-03-26 are also accepted.
  • Authentication: a bearer token on every request. There is no OAuth flow.

Create a token

  1. Open Settings › API tokens and choose Create token.
  2. Give it a name, for example Claude Code on my laptop.
  3. Choose its scopes.
  4. Choose when it expires: Never, In 30 days, In 90 days, or In a year. In the Mac and iOS apps, enter a number of days up to 365, or leave it empty for no expiry.
  5. Choose Create token.

The token starts with rvp_. It is shown once and stored hashed, so copy it immediately. The list shows each token as Active or Expired, with when it was last used. Revoke a token from the same list; it stops working immediately and leaves the list.

Members see and revoke only their own tokens. Organization owners see every member’s tokens and can revoke any of them.

A token is bound to one user and one organization. It cannot reach any other organization.

Scopes

Scope Label Grants
tasks:read Read tasks List repositories, workers, and tasks; read task state, transcripts, changes, and files.
tasks:write Run tasks Create tasks and conversations, send messages, cancel, archive, and restore.
git:write Git actions Commit, push, open and merge pull requests, and discard changes.
linear:read Read Linear Search the organization’s Linear teams, projects, and issues, and link a task to an issue.
linear:write Write to Linear Create and update Linear issues, and comment on them.

New tokens start with Read tasks and Run tasks selected. An agent only sees the tools its token’s scopes allow.

Connect a client

Claude Code

The token dialog prints this command, filled in with your token:

claude mcp add --transport http rivets https://app.rivets.dev/api/mcp --header "Authorization: Bearer rvp_..."

Codex

Put the token in an environment variable and point Codex at the endpoint:

export RIVETS_MCP_TOKEN=rvp_...
codex exec \
  -c mcp_servers.rivets.url="https://app.rivets.dev/api/mcp" \
  -c mcp_servers.rivets.bearer_token_env_var=RIVETS_MCP_TOKEN \
  -- "list my Rivets tasks"

This keeps the token out of the command line, where other users on the machine could see it.

MCP Inspector

npx @modelcontextprotocol/inspector

Choose Streamable HTTP, enter the endpoint URL, and add an Authorization: Bearer rvp_... header.

Other clients

Any client that speaks Streamable HTTP works. Send the bearer header on every request.

Tools

Rivets has 30 tools. Personal tokens can reach 28 of them; the other two are reserved for Rivets’ own use. None take an organization argument: the token decides it. IDs are prefixed: repo_ for repositories, wt_ for tasks, chat_ for conversations. A ? marks an optional argument.

Tasks

Tool Scope Arguments What it does
rivets_whoami none none The account, organization, and token in use, with the token’s scopes.
rivets_list_repos tasks:read none Repositories you can use in the organization, and whether each is connected through the GitHub App.
rivets_list_workers tasks:read none Workers, whether they are online, whether you can use them, and which agents each has ready.
rivets_list_tasks tasks:read repoId?, status?, includeArchived?, limit? Tasks, newest first. Up to 100, 25 by default.
rivets_get_task tasks:read worktreeId One task’s branch, status, conversations, and pull request.
rivets_get_task_output tasks:read worktreeId? or chatId?, afterSeq?, limit? A condensed transcript. Pass the returned lastSeq back as afterSeq to read only what is new.
rivets_list_changes tasks:read worktreeId, includeDiff?, paths? Changed files with line counts, optionally with diffs. Diffs are capped at 40 KB in total.
rivets_read_file tasks:read worktreeId, path One file from a task’s checkout. Truncated past 40,000 characters.
rivets_create_task tasks:write repoId, prompt, clientRequestId, provider?, baseBranch?, routing?, linearIssue? Start a task: worktree, branch, first conversation, and agent run in one call.
rivets_create_chat tasks:write worktreeId, prompt, clientRequestId, title?, provider? Start another conversation in an existing task. It uses the task’s agent unless you name one.
rivets_send_message tasks:write chatId, text Steer a running agent, or resume a finished one.
rivets_cancel_task tasks:write chatId Stop the running agent. Work already written is kept.
rivets_archive_task tasks:write worktreeId Archive a finished task.
rivets_restore_task tasks:write worktreeId Restore an archived task while the worker still has its checkout.

clientRequestId must be a new unique string for each real request. Sending the same one again returns the original task or conversation instead of creating a second one, so retries are safe.

Without provider, a new task runs on your agent defaults. Pass linearIssue: { id }, with an identifier such as ENG-123 or the issue’s ID, to link the task to a Linear issue. This needs the linear:read scope. The task shows the issue as its source, its Team discussion is connected to the issue, and the agent’s prompt starts with one line naming the issue. The issue’s description is not added, so put what the agent needs in your prompt.

Tasks that came from Linear can wait in awaiting_approval until a member approves them in Rivets. An agent cannot approve them or send them messages. See Linear.

Git and pull requests

Tool Scope Arguments What it does
rivets_pr_workspace tasks:read worktreeId The saved pull request draft, git state, the linked pull request, and its checks and reviews.
rivets_prepare_pr git:write worktreeId, baseBranch, generate, paths?, refresh?, providerId?, model?, templatePath?, inferCommitConvention? Capture exactly what will be published. With generate: true, also write a candidate title, description, and commit message. paths: [] prepares only what is already committed.
rivets_save_pr_draft git:write worktreeId, expectedRevision, the draft’s title, body, base, draft state, and commit message Save the Rivets draft. Does not update GitHub.
rivets_run_pr_action git:write worktreeId, operationId, action, preparationId, draftRevision Run commit, commit-push, push, create, sync-base, sync-upstream, continue-sync, or abort-sync. Retry with the same operationId and inputs.
rivets_update_pr git:write worktreeId, operationId, draftRevision, expectedMetadataRevision Publish the saved draft’s title, description, base, and draft state to the existing pull request on GitHub.
rivets_merge_pull_request git:write worktreeId, expectedHeadSha, method? Merge the revision you reviewed. Fails if new commits were pushed since.
rivets_discard_changes git:write worktreeId, paths, confirm: true Permanently discard uncommitted changes to the named files.

Unlike people in the app, agents have no Merge anyway: rivets_merge_pull_request always requires passing checks and a fully published task.

Linear

These use your organization’s existing Linear connection. If Linear is not connected, they return an error saying so.

Tool Scope Arguments What it does
rivets_linear_list_teams linear:read cursor? Teams with their keys and workflow states.
rivets_linear_list_projects linear:read query?, teamKey?, includeCompleted?, limit?, cursor? Find a project by name.
rivets_linear_list_issues linear:read query?, teamKey?, project?, state?, stateType?, assignee?, label?, priority?, includeArchived?, limit?, cursor? Search issues. Only open issues unless you name a state. assignee: "me" resolves to your linked Linear account.
rivets_linear_get_issue linear:read id One issue in full, with comments, attachments, parent, and sub-issues.
rivets_linear_create_issue linear:write teamKey, title, description?, projectId?, priority?, labelIds?, assigneeId?, parentId? File a new issue.
rivets_linear_update_issue linear:write id, title?, description?, stateName? or stateId?, assigneeId?, priority?, projectId?, labelIds? Change an issue’s title, description, state, assignee, priority, project, or labels.
rivets_linear_create_comment linear:write issueId, body Comment on an issue as the Rivets app.

Issue IDs accept an identifier such as ENG-123 or Linear’s ID. List tools return nextCursor when there are more results; pass it back as cursor.

Reserved tools

rivets_watch_task and rivets_unwatch_task are used internally by Rivets to be woken when a task finishes. They need a scope that personal tokens cannot carry, so they never appear in your token’s tool list.

Rate limits

Limit Applies to When exceeded
120 calls per minute Each token HTTP 429 with Retry-After
20 task creations per hour Each person’s MCP tokens in an organization rivets_create_task returns a create_rate_limited error

Errors

Authentication problems are HTTP errors: 401 for a missing, revoked, or expired token, 403 for a suspended account or removed membership. Tool failures, such as an offline worker or a missing scope, come back as tool results marked as errors, with a code and a readable message, so an agent can explain them and recover. Useful codes include worker_offline, worktree_archived, awaiting_approval, insufficient_scope, not_found, create_rate_limited, and linear_not_connected. A result over 60 KB comes back as result_too_large, asking the agent to narrow the request.

What MCP cannot do

MCP cannot manage API tokens, invite members, change organization settings, register workers, or open terminals. Those require signing in to Rivets. A leaked token can run and read tasks in one organization, but it cannot escalate beyond that.

Type to search the docs.