Read-only MCP server: your agent sees all your sibling repos but structurally cannot touch them
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A periscope for your repos β see everything, touch nothing.
Repiscope is a read-only MCP server that gives your coding agent (Claude Code, Cursor, or any MCP client) awareness of the sibling repositories next to the one it's working in β without ever letting it modify them.
I built a personal assistant to help me decide where my time goes: for that it needs to know the real state of every project β what changed, what stalled, what the next step is. So it has to see all my repos. But telling an agent "don't touch anything" is a request, not a guarantee. Repiscope makes it a guarantee: the server exposes zero write tools, so the agent structurally cannot modify your repos. And the same periscope helps any coding agent working in project A that needs to know how a part of project B works.
Sandboxes make this worse, not better: mine (rightly) stops the agent from even reading outside the repo it started in without asking. Widening the sandbox would grant write access too. Repiscope is the third way β the agent gets structured, read-only sight of every sibling repo through one MCP server, and the sandbox stays tight.
You're working in project-a and need to pull data from another project's
API. Instead of you digging through that codebase, the agent asks Repiscope
directly:
The agent explored a repo it has no ability to write to. No copy-paste, no "please don't edit anything," no risk.
| Tool | Input | Returns |
|---|---|---|
list_projects() | β | every sibling repo + one-line description |
project_overview(project) | repo name | full overview: purpose, stack, structure, recent commits |
search(query, project?) | text, optional repo | files & lines matching the query |
read_file(project, path) | repo + file path | full file contents (size-capped) |
store_summary(project, summary) | repo + your text | caches an agent-written summary (see below) |
Overviews are cached as markdown and refreshed lazily: on each call Repiscope compares the repo's current git commit hash against the one recorded when the overview was built. Same hash β serve the cache. Different β rebuild just that repo's overview. No cron, no daemons.
Repiscope has no LLM of its own β no API key, no model calls, zero cost. But
it talks to LLMs all day, so it borrows them: when an overview has no fresh
agent-written summary, it ends with a note asking the calling agent to
write one and hand it back via store_summary. The summary then opens every
future overview of that project β written by one agent, read by all the
next β until the repo's next commit marks it outdated and the cycle repeats.
Repiscope is built so that the safe behaviour is not a promise β it's the only behaviour possible:
store_summary, can only write to Repiscope's own cache in
~/.cache/repiscope. An agent cannot misuse a capability that doesn't
exist.privacy.py) is enforced by
every tool: private keys, certificates (.pem, .pfx, .p12, β¦),
.env* files, keystores, and anything named like a credential never
appear in overviews, trees, search results or file reads.
Honest limit: the filter hides sensitive files β it does not scrub
mentions of e.g. a password pasted inside an ordinary text file.notes.txt β ~/.ssh/id_rsa. Anything whose real
location falls outside the project is invisible to every tool, the secret
filter also checks a link's real target, and path traversal (../) is
refused.--root), and --exclude makes chosen repos fully
invisible β they can't even be resolved by name.~/.cache/repiscope,
never inside your repositories.Every claim above is enforced by the test suite in tests/ β clone the
repo and run pytest to check them yourself.
That's it β point --root at the folder containing your repos (not a repo
itself). Optionally hide repos with --exclude repo-a --exclude repo-b.
Works with any MCP client; for Claude Desktop there's also a one-click
.mcpb bundle (build it with mcpb/build.sh).
From source instead:
Honesty section β what Repiscope deliberately does not do:
notes.md will not
be scrubbed. The perimeter is yours: only point --root at folders you
are comfortable showing to your agent β whatever the tools can see, your
LLM provider will see too.v0.2.2 β working and dogfooded daily. Four read-only tools plus borrowed-LLM
summaries, lazy cache refresh, sensitive-file filtering, and a test suite
proving the security claims (path traversal, symlink escapes, secret
filtering β see tests/). API may still change.
To be completely clear about authorship: I am not an engineer. Every architecture decision in Repiscope is mine β what it does, what it refuses to do, where the security gates live β but the coding itself is done by Claude (Anthropic's Fable model). My rule for the collaboration: nothing goes in that I don't understand. The commit history carries the co-authorship openly, commit by commit.
mcp-name: io.github.3xpr1ment/repiscope
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/repiscope)<a href="https://allmcps.com/mcp/repiscope"><img src="https://allmcps.com/api/badge/repiscope?style=directory" alt="Repiscope on AllMCPs" /></a>