Get started
Connect an agent
Each agent works with its own access token, and every change it makes is recorded under that token’s name, so you can tell agents apart and revoke one without touching the others. There are two ways to give an agent a token: sign in from the agent (OAuth), or create one yourself and paste it into the agent’s config.
On this page
Sign in from the agent#
Web chat apps such as claude.ai and ChatGPT take only a URL for a custom
connector, then send you to sign in. Claude Code does the same when you add
the server without a token. This needs the server’s ROADMAP_BASE_URL set
(see Deployment).
claude.ai: open Settings → Connectors → Add custom connector, and give
it your server’s /mcp address, such as https://roadmap.example.com/mcp.
Claude Code:
claude mcp add --transport http roadmap https://roadmap.example.com/mcpThen run /mcp in Claude Code and choose Authenticate.
Either way, a browser tab opens on your Roadmap server. Sign in if you aren’t, and you see a page naming the app and where it sends you back to. Tick Read only if the app should only look, then click Allow.
The connection appears in Settings → Access tokens as a connected app, under the app’s name. Revoking it there disconnects the app. Its access token lasts an hour and the app renews it on its own; if it goes unused for 30 days, you sign in again.
The rest of this page is the other way: a token you create and paste.
1. Create a token#
In the web UI, open Settings → Access tokens and create one token per agent. Tick read-only for an agent that should only look (a dashboard, a CI report): it can call every read, and every write is refused.
The token starts with rmp_ and is shown once. Below, replace rmp_... with
it and https://roadmap.example.com with your server’s address
(http://127.0.0.1:8080 for a local run).
2. Point the agent at /mcp#
The server speaks MCP over streamable HTTP at /mcp. The Connect an agent
dialog in the web UI’s help menu shows the same config with your server’s
address filled in.
Claude Code#
claude mcp add --transport http roadmap https://roadmap.example.com/mcp \
--header "Authorization: Bearer rmp_..."Add --scope project to write it to the repository’s .mcp.json instead of
your user config. Don’t commit a real token.
Cursor, and other clients that take an mcpServers URL#
.cursor/mcp.json in a project, or ~/.cursor/mcp.json for every project:
{
"mcpServers": {
"roadmap": {
"url": "https://roadmap.example.com/mcp",
"headers": { "Authorization": "Bearer rmp_..." }
}
}
}Claude Desktop, and other clients that only speak stdio#
These clients start a local command and talk to it over stdin and stdout. The
roadmap binary has a stdio mode for this: it proxies to your server and never
opens a database. Get the binary from the
releases page or with
go install github.com/emb715/roadmap/cmd/roadmap@latest.
{
"mcpServers": {
"roadmap": {
"command": "roadmap",
"args": ["mcp", "--stdio", "--addr", "https://roadmap.example.com"],
"env": { "ROADMAP_TOKEN": "rmp_..." }
}
}
}--addr takes an https:// URL for a server behind TLS, or a bare
host:port such as 127.0.0.1:8080 for a local one over plain HTTP.
For Claude Desktop this goes in claude_desktop_config.json (Settings →
Developer → Edit Config). Restart the app afterwards. If roadmap is not on
the app’s PATH, give command the binary’s full path.
3. Let it work#
Ask the agent what it can see, for example “list the open issues in Roadmap”. When it moves an issue to In review, the issue lands in the Review inbox, where a person approves it. Agents can propose changes to documents but never approve them.
Scripts and CI: the REST API#
Anything that is not an MCP client can use the same token against /api/v1:
export ROADMAP=https://roadmap.example.com
export ROADMAP_TOKEN=rmp_...
curl -H "Authorization: Bearer $ROADMAP_TOKEN" $ROADMAP/api/v1/projectsEvery MCP tool has one endpoint. The OpenAPI document is served at
/api/v1/openapi.json. See docs/API.md for rate limits, CORS and
file uploads.
Troubleshooting#
- 401 Unauthorized. The token is missing, mistyped or revoked. Check the
header is exactly
Authorization: Bearer rmp_.... - The app says the server doesn’t support sign-in. The server has no
ROADMAP_BASE_URL, or an operator setROADMAP_OAUTH=off. Use a token you create instead. - “This sign-in link does not work.” The app’s registration expired or the link was changed. Start connecting again from the app.
- 403 on a write. The token is read-only.
- The agent sees no tools. Make sure the URL ends in
/mcp, and that the server is reachable from where the agent runs (a local server binds127.0.0.1only).