The provider model
Three kinds of provider sit behind small, stable contracts. Each row below is an implementation you can select; adding another is a single adapter, not a rewrite.
| Contract | Implementations | Selected by |
|---|---|---|
| Board | Jira · Trello · Local (graph-backed) | RYVEM_PROVIDER |
| Version control | GitHub · Bitbucket · GitLab (incl. self-hosted) | the token you set (the host your repo uses) |
| Docs / knowledge | Confluence | shares the Jira token when scoped |
Credentials live in a plain .env next to the binary — written by the setup wizard or by hand. Nothing is sent anywhere; the file is read locally at start-up. This page details the two providers most often configured by hand — Jira and GitLab — and the local board that needs no credentials at all. Trello, GitHub, and Bitbucket are covered on Getting started; the full environment reference is on Configuration.
Jira
Jira is the default board provider. You need three values: your site's base URL, your Atlassian account email, and a scoped API token. The wizard asks for them in that order and writes them to .env.
| Field | Example | Notes |
|---|---|---|
| Base URL | https://yourco.atlassian.net | your Jira Cloud site root |
you@company.com | the Atlassian account the token belongs to | |
| Token | ATATT… | an API token with scopes (below) |
Create the token
Go to Atlassian account › Security › API tokens › Create API token with scopes — the page the wizard prints, https://id.atlassian.com/manage-profile/security/api-tokens. Name it ryvem-mcp, choose the Jira product, and grant exactly these scopes:
| Scope | Grants |
|---|---|
read:jira-work | read boards, issues, comments, transitions |
write:jira-work | create and update issues, comment, move, link |
read:jira-user | resolve assignees and board members |
The resulting .env keys:
RYVEM_PROVIDER=jira
JIRA_URL=https://yourco.atlassian.net
ATLASSIAN_EMAIL=you@company.com
JIRA_TOKEN=your-atlassian-api-token
Confluence rides the same token
If your token is scoped for Confluence too, the docs tools work with no extra setup: CONFLUENCE_URL defaults to <JIRA_URL>/wiki and CONFLUENCE_TOKEN defaults to JIRA_TOKEN. Set them explicitly only to override.
Jira supports native subtasks, issue links, and comment properties, and exposes its projects as workspaces that create_task can target. It does not create boards over the API — a Jira project needs an admin and a template.
GitLab
GitLab is one of the three version-control providers (GitHub and Bitbucket are the others). Ryvem models merge requests as pull requests, addressed by their per-project iid. Set only the token for the host your repository actually uses; the origin remote decides the project on every call.
Create the token
In GitLab, go to User settings › Access tokens and create a Personal Access Token. The wizard prints the exact page for your host — https://gitlab.com/-/user_settings/personal_access_tokens for the cloud, or https://<your-host>/-/user_settings/personal_access_tokens for a self-hosted instance. One scope is required:
| Scope | Grants |
|---|---|
api | read and write merge requests, discussions, reviews, and the token owner's identity |
For gitlab.com, the token is all you need:
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
For a self-hosted instance, add the host (no scheme, no path). Leaving it blank means gitlab.com:
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx
GITLAB_HOST=gitlab.yourcompany.com
No email for GitLab
GitLab authenticates with the token alone (the PRIVATE-TOKEN header needs no email), so GITLAB_EMAIL is intentionally ignored. If a token stops working, the API surfaces a 401 — create a fresh token with the api scope and update GITLAB_TOKEN.
Local board
The local board is what makes Ryvem run in any repository — personal or corporate, with or without a tracker. It is a full board (columns, tasks, subtasks, links, comments) backed entirely by the memory graph, so there is no external service, no account, and no network. Decline every wizard prompt and Ryvem boots on it automatically; there is nothing to create.
# No .env at all also works — this is only explicit.
RYVEM_PROVIDER=local
What it stores, and where
One board is auto-created per repository, anchored to the working copy the server runs in and keyed to that repo's graph scope (repo:<uuid>). Tasks, comments, subtasks, and links all live as graph nodes and edges — descriptions and comments are native markdown. It ships with four columns in flow order:
| Column | Category |
|---|---|
| Backlog | todo |
| To Do | todo |
| In Progress | in_progress |
| Done | done |
Task keys are <SLUG>-<n>, where the slug is derived from the repository folder name and n is a gap-free, strictly increasing counter. Everything persists in the single SQLite memory graph:
| Platform | Default location |
|---|---|
| macOS / Linux | ~/.ryvem/dev.db |
| Windows | %USERPROFILE%\.ryvem\dev.db |
Override the parent directory with RYVEM_DATA_DIR. Because the board is just graph data, its history and search behave exactly like the rest of the memory graph.
Limits
| Area | Behaviour |
|---|---|
| Membership | single user — whoAmI is your name (default you), and "my tasks" is every open (non-done) task |
| Search | plain full-text (graph BM25); there is no JQL — a query is always treated as free text |
| Attachments | none stored — attachment downloads fail actionably rather than returning bytes |
| Workspaces | not applicable — the local board neither lists workspaces nor creates boards over the API |
None of this is a dead end: a card created on the local board can later be promoted to Jira or Trello once you connect one.
Switching providers later
Edit .env and restart the server — no migration step. The local board's data stays in the graph and remains queryable even after you point RYVEM_PROVIDER at Jira or Trello.