Dogfooding a local MCP context server for coding agents on a ROS 2 Python repo

Note: RSM is not a ROS-specific project. I am sharing it here because I dogfooded it while working on `lifecore_ros2`, and it may be useful to ROS developers using coding agents on larger Python/documentation-heavy repositories.
This is not a ROS-specific tool and does not yet index .msg, .srv, or .action files.

repo-semantic-memory: local repository context for coding agents

I built repo-semantic-memory (rsm) while working on lifecore_ros2, a Python lifecycle framework for ROS 2 nodes.

The problem was not that the coding agent could not edit code. The problem was that it first had to rediscover the repository: where the behavior lived, which tests mattered, which docs explained the design, and which files were related.

That context-building step became repetitive and expensive.

RSM is an attempt to make that step explicit.

It indexes a local repository and helps prepare task-focused context before the agent starts editing. The main workflow is through MCP: RSM ships with a local read-only MCP server, so compatible agents can call tools like:

  • rsm_search
  • rsm_find_related
  • rsm_prepare_context
  • rsm_get_context_page

In practice, the agent can ask RSM for task-relevant files, tests, docs, and related context directly from the editor workflow.

CLI commands are also available for indexing, manual ContextPack generation, project briefs, and evaluation.

What it can help with

For ROS 2 developers working mostly in Python, RSM can help:

  • find task-relevant implementation files, tests, and docs
  • prepare focused context before using a coding agent
  • generate a short project brief for an agent to read before editing
  • expose repository search and ContextPack tools through MCP-compatible clients

Store mode can also expose multiple registered repository indexes from one MCP server.

Honest limitations

RSM is experimental pre-1.0 software.

The most important ROS-related limitation is that it does not index .msg, .srv, or .action files yet. That is on the roadmap, but not implemented today. If your task depends heavily on interface files, RSM will miss part of the picture.

It currently works best for Python and documentation-heavy repositories.

The MCP server is local and read-only. It does not edit files and does not auto-index in the background.

Try it

Build an index:

uv sync --all-groups

uv run rsm index . --db .rsm/index.sqlite

Expose it through MCP:

uv run rsm mcp serve --repo /path/to/repo --db /path/to/index.sqlite

Or prepare a ContextPack manually:

uv run rsm pack --db .rsm/index.sqlite --task "validate lifecycle cleanup" --budget 8000

uv run rsm project-brief --db .rsm/index.sqlite --force

GitHub repo · Known limitations · Roadmap