MCP Server
The Rohrpost MCP server (rohrpost-mcp) is a stateless bridge that exposes your knowledge base to any AI assistant that speaks the Model Context Protocol — Claude, Cursor, VS Code Copilot, and others.
Overview
When your AI assistant calls a Rohrpost MCP tool, rohrpost-mcp translates it into an HTTP request to the Rohrpost gateway and returns the result. No database access, no local state — just a thin HTTP bridge. The gateway handles auth, tenant isolation, and all retrieval logic.
AI assistant → MCP client → rohrpost-mcp → gateway :7878 → Postgres + Tantivy + AGEInstallation
Download (managed)
If you use app.rohrpost.io, log in and open the Downloads tab in your admin panel. Pre-built binaries are available for:
- Linux x86-64
- Linux arm64
- macOS Apple Silicon
- macOS Intel
After downloading, mark it executable:
chmod +x rohrpost-mcp-linux-x86_64
# move it somewhere on your PATH
mv rohrpost-mcp-linux-x86_64 ~/.local/bin/rohrpost-mcpBuild from source
Requires Rust 1.95+.
git clone https://codeberg.org/ftieben/rohrpost.io
cd rohrpost.io
cargo build --release --bin rohrpost-mcp
# binary is at target/release/rohrpost-mcpConfiguration
Environment variables
| Variable | Default | Description |
|---|---|---|
ROHRPOST_GATEWAY_URL | http://localhost:7878 | URL of the Rohrpost gateway |
ROHRPOST_API_KEY | — | API key (required for managed, optional for unauthenticated self-hosted) |
RUST_LOG | info | Log level (debug, info, warn, error) |
Create your API key in the API Keys tab of your admin panel. Keys are scoped to a tenant and start with rp_.
Claude Desktop
Edit claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
Managed (app.rohrpost.io):
{
"mcpServers": {
"rohrpost": {
"command": "/path/to/rohrpost-mcp",
"env": {
"ROHRPOST_GATEWAY_URL": "https://app.rohrpost.io",
"ROHRPOST_API_KEY": "rp_your_api_key"
}
}
}
}Self-hosted (local):
{
"mcpServers": {
"rohrpost": {
"command": "/path/to/rohrpost-mcp",
"env": {
"ROHRPOST_GATEWAY_URL": "http://localhost:7878",
"ROHRPOST_API_KEY": "rp_your_api_key"
}
}
}
}Cursor
Create .cursor/mcp.json in your project root (project-scoped) or configure in Cursor Settings → MCP (global):
{
"mcpServers": {
"rohrpost": {
"command": "/path/to/rohrpost-mcp",
"env": {
"ROHRPOST_GATEWAY_URL": "https://app.rohrpost.io",
"ROHRPOST_API_KEY": "rp_your_api_key"
}
}
}
}VS Code (GitHub Copilot)
Create .vscode/mcp.json in your project:
{
"servers": {
"rohrpost": {
"type": "stdio",
"command": "/path/to/rohrpost-mcp",
"env": {
"ROHRPOST_GATEWAY_URL": "https://app.rohrpost.io",
"ROHRPOST_API_KEY": "rp_your_api_key"
}
}
}
}Tools reference
No tool takes a tenant parameter — the gateway resolves your tenant from the API key inROHRPOST_API_KEY, so there's nothing to pass or get wrong. Everything below is scoped to whichever tenant that key belongs to.
rohrpost_ingest
Stores knowledge into the knowledge base. The content is chunked, embedded, and indexed for later retrieval.
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | string | yes | One of: prompt, response, tool_call, diff, error, note |
content | string | yes | The text content to store |
supersedes | string[] | no | Capsule IDs this new capsule replaces — recall down-ranks/annotates superseded hits |
Example system prompt instruction:
At the end of our conversation, call rohrpost_ingest with kind="note"
and summarize the key decisions and discoveries we made today.rohrpost_preflight
Describe what you're about to do in plain language and get relevant context back before starting — the recommended way to open a task, since it combines recall with graph expansion around any entities your intent mentions.
| Parameter | Type | Required | Description |
|---|---|---|---|
intent | string | yes | Plain-language description of what you intend to do |
project | string | no | Optional project slug to scope the search |
token_budget | integer | no | Max tokens in the packed brief (128–16384, default 4096) |
graph_depth | integer | no | Graph traversal depth 1–5 (default 2) |
Example system prompt instruction:
Before starting any non-trivial task, call rohrpost_preflight with a short
description of what you're about to do.rohrpost_recall
Retrieves the most relevant knowledge for a query using hybrid search (vector similarity + BM25 + 1-hop graph expansion), packed into a markdown brief — with an optional cross-encoder reranking pass when a reranker service is configured.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | Natural language query |
top_k | integer | no | Max results to consider (default 10) |
token_budget | integer | no | Max tokens in the packed brief (128–16384) |
Example system prompt instruction:
At the start of each conversation, call rohrpost_recall with the user's
first message as the query to load relevant context before answering.rohrpost_graph
Explores entity relationships in the knowledge graph. Useful for understanding how concepts, files, functions, or decisions are connected.
| Parameter | Type | Required | Description |
|---|---|---|---|
entity | string | no* | Entity name to start from |
entity_id | string | no* | Entity UUID (takes precedence over entity) |
depth | integer | no | Traversal depth 1–5 (default 2) |
* Provide at least one of entity or entity_id.
rohrpost_graph_entry_points
Finds well-connected entities by kind — a good starting point for graph exploration when you don't have a specific entity in mind.
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | string | yes | Node kind: Capsule, Chunk, Commit, Concept, Crate, Decision, Endpoint, Entity, Error, File, Function, Migration, Test, Tool, Trait |
query | string | no | Case-insensitive substring filter on entity name |
limit | integer | no | Max results 1–100 (default 20) |
rohrpost_hydrate
Connects isolated graph nodes to their named peers — fills in relationships that entity extraction missed the first time around, without re-ingesting anything.
| Parameter | Type | Required | Description |
|---|---|---|---|
dry_run | boolean | no | When true, only report what would be connected without creating any edges |
rohrpost_forget
Permanently deletes a capsule and all associated chunks, embeddings, and graph nodes.
| Parameter | Type | Required | Description |
|---|---|---|---|
capsule_id | string | yes | ID of the capsule to delete (1–128 characters) |
To find a capsule ID, call rohrpost_recall first — the brief includes capsule IDs for attribution.
rohrpost_okf_export
Exports the knowledge graph in Open Knowledge Format — a structured snapshot of entities and their relationships, suitable for backup or cross-tenant import.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Max concepts to include 1–1000 (default 200) |
rohrpost_status
Checks gateway health and component status (Postgres, NATS, Ollama, Garage) — and, once you've installed the Claude Code plugin's lifecycle hooks, how long ago the last automatic capture actually reached the gateway. Takes no parameters. Good to call once at the start of a session.
Skills registry
The skills registry stores reusable prompt templates and instructions scoped to a tenant (and optionally a project). Skills are returned in rohrpost_recall results automatically when relevant.
| Tool | Description |
|---|---|
rohrpost_skill_upsert(name, content, project?) | Creates or updates a skill. Name must match ^[a-z0-9][a-z0-9-]{0,63}$. |
rohrpost_skill_get(name, project?) | Retrieves a skill by name. Project-scoped version takes precedence when project is set. |
rohrpost_skill_list(project?) | Lists all skills for the tenant, merged with project-scoped skills when project is set. |
rohrpost_skill_delete(name, project?) | Deletes a skill. Deletes the project-scoped version only when project is set. |
Tips for effective use
- Load context on session start. Instruct your assistant to call
rohrpost_recallwith the user's opening message at the beginning of every conversation. - Persist on session end. Instruct your assistant to call
rohrpost_ingestat the end of each session to save decisions, discoveries, and unresolved questions. - Choose the right kind. Use
kind="note"for facts and decisions,kind="diff"for code changes,kind="response"for full assistant turns. The kind is indexed and affects retrieval scoring. - One tenant per project. Tenant slugs are your isolation boundary — use a separate slug for each project or context to avoid knowledge bleed between codebases.
- Graph after ingest. The knowledge graph is built incrementally as you ingest. Entity extraction runs on each capsule — the more you ingest, the richer the graph becomes. Use
rohrpost_graph_entry_pointsto explore it. - Use skills for standing instructions. Store recurring prompt patterns (code review checklists, coding standards, architecture invariants) as skills so they're automatically surfaced during recall.