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 + AGE

Installation

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-mcp

Build 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-mcp

Configuration

Environment variables

VariableDefaultDescription
ROHRPOST_GATEWAY_URLhttp://localhost:7878URL of the Rohrpost gateway
ROHRPOST_API_KEY—API key (required for managed, optional for unauthenticated self-hosted)
RUST_LOGinfoLog 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.

ParameterTypeRequiredDescription
kindstringyesOne of: prompt, response, tool_call, diff, error, note
contentstringyesThe text content to store
supersedesstring[]noCapsule 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.

ParameterTypeRequiredDescription
intentstringyesPlain-language description of what you intend to do
projectstringnoOptional project slug to scope the search
token_budgetintegernoMax tokens in the packed brief (128–16384, default 4096)
graph_depthintegernoGraph 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.

ParameterTypeRequiredDescription
querystringyesNatural language query
top_kintegernoMax results to consider (default 10)
token_budgetintegernoMax 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.

ParameterTypeRequiredDescription
entitystringno*Entity name to start from
entity_idstringno*Entity UUID (takes precedence over entity)
depthintegernoTraversal 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.

ParameterTypeRequiredDescription
kindstringyesNode kind: Capsule, Chunk, Commit, Concept, Crate, Decision, Endpoint, Entity, Error, File, Function, Migration, Test, Tool, Trait
querystringnoCase-insensitive substring filter on entity name
limitintegernoMax 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.

ParameterTypeRequiredDescription
dry_runbooleannoWhen 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.

ParameterTypeRequiredDescription
capsule_idstringyesID 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.

ParameterTypeRequiredDescription
limitintegernoMax 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.

ToolDescription
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_recall with the user's opening message at the beginning of every conversation.
  • Persist on session end. Instruct your assistant to call rohrpost_ingest at 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_points to 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.