Skip to main content

retrieval-mcp

Package release: 0.4.11 (2026-09-15), 33 tools. Platform architecture: ../overview.md.

0.4.11 adds Retrieval-first initialize guidance and permits one MCP call to carry multiple independent query strings for search_code, journal_search, search_public_code, search_papers, and search_within_paper. A string remains fully compatible; a list preserves input order (including duplicates), runs each query with the existing filters/depth/rerank/formatter, and labels each result. The batch has bounded in-flight concurrency only; it never shares or trims candidates. 0.4.10 fixes a cross-project scope bug. The daemon is an account-level singleton, but a relative scope (scope_dir=".", repo_root=".", save_dir=".") was resolved against the DAEMON's own working directory — whichever project's shim started it. So journal reads returned a foreign repo, journal_record wrote into that repo's namespace, and downloads landed in the wrong project. The shim now sends its directory in the authenticated raw handshake and the daemon binds it per session with a context variable, so concurrent sessions from different projects stay independent. DAEMON_PROTOCOL_SCHEMA_VERSION goes 1 → 2 so a fixed shim cannot reuse an unfixed daemon. Tool surface is unchanged (33 tools, same digest).

Two changes in 0.4.9 over 0.4.8:

  • index_code and journal_index_dir document the nested-scope guard's gitignore exception — a child scope indexing with respect_gitignore=False under a filtered parent now warns instead of being refused.

  • Request bodies over 64 KiB are compressed with zstd level 3, which is what index_code/index_dir uploads are (a real 19.3 MiB body becomes 2.2 MiB in 54 ms). This adds a zstandard dependency; it also makes httpx advertise zstd, so replies come back compressed with no further work.

    It does not require a backend upgrade. Compression is negotiated per request: the client learns a backend accepts compressed bodies from the Accept-Encoding response header (RFC 7694), and a backend that does not rejects the body with 400/415/422 — all decided before the route function runs, so the automatic uncompressed resend cannot duplicate an index submission. After one such rejection the client stops compressing for the session.

find_duplicate_code was added in 0.4.8 and its backend endpoint is live on .88.

The package declares mcp>=1.29,<1.30. In addition to the public SDK v1 FastMCP API, the raw JSONL daemon bridge uses the verified 1.29 low-level SessionMessage and server-stream APIs. The narrow upper bound is therefore a private-API compatibility contract, not merely a v2 exclusion; raising it needs the daemon concurrency and clean-wheel MCP regressions first.

The daemon's 33-tool compatibility digest covers each tool name, full inputSchema, and semantic description text. Description canonicalization uses inspect.cleandoc only to remove the shared docstring margin emitted differently by the supported Python 3.10/Pydantic and Windows renderers; it does not reduce the fence to tool names or discard meaningful relative indentation.

Code indexing deliberately declares chonkie[code]>=1.6,<1.7, tree-sitter-language-pack>=1.8,<1.13, and tree-sitter>=0.23,<0.26. The local CodeChunker path is verified on Chonkie 1.6.x, the 1.12.x language-pack line, and the native tree-sitter 0.25.x ABI. Chonkie's code extra only gives its parser dependencies lower bounds; the explicit companion constraints prevent a fresh install from silently crossing into a newer parser-pack or native ABI line. The native constraint is intentional because local indexing executes native parser code and its crash boundary must not drift. Raising any upper bound requires a CodeChunker regression and a clean wheel-install MCP smoke; this is a compatibility contract, not a package-cache workaround.

An MCP server for the Retrieval academic-paper API - semantic paper search, document matching, ACE journal memory, and index inventory. Self-contained: it talks to the backend over HTTP only (just mcp + httpx), so it installs anywhere with uvx / pip - no repo checkout, no GPU, no models.

By default it targets the compute box on the lab LAN (http://10.100.100.111:8000), which trusts LAN callers so no key is needed. Off-LAN, point RETRIEVAL_API_URL at the public gateway (https://retrieval.rnarket.com) and set RETRIEVAL_API_KEY (sk-...).

Tools

Every tool's full docstring (purpose + each argument with its default + an example) is what your LLM sees - call them by name. Summary:

Paper retrieval

Tool What it does
search_papers Semantic hybrid search over the live top-venue corpus (filters: venue, year, title_only)
search_within_paper Every matching passage inside one paper
get_paper_markdown Return one paper's complete Markdown, or Range-stream it to a caller-local file/directory
download_paper_pdf Range-stream the original PDF to a caller-local path with validated resume and atomic publication
download_papers Download pdf, markdown, or both for 1-10 paper IDs with two bounded concurrent transfers
match_document / match_paper Content-nearest papers to a passage / to a paper
list_conferences / corpus_stats Venue registry / corpus size

Journal work-memory (scoped to the current project by default)

Tool What it does
journal_record Record a work note (memory) or a file's current content (doc, latest-wins)
journal_search Search memory - keyword (FTS5, no embedding) or hybrid/dense/sparse
journal_recent List recent entries
journal_index_dir Batch-index a local dir's files into the journal (latest-wins per file)
journal_index_status Poll an asynchronous Journal directory-index job
delete_journal_docs Explicitly remove batch-indexed Journal documents for one directory scope

Code KB (source stays local - only chunks are uploaded)

Tool What it does
index_code AST-chunk a repo locally (40+ languages) and index it, scoped to you
index_code_status Poll local preparation plus backend Code KB embedding/upsert progress
search_code Semantic code search with path:line citations
find_duplicate_code Report file pairs in an indexed scope that duplicate each other
delete_code Explicitly remove one Code KB scope from vectors and inventory
index_inventory Your indexed-file tree: user -> host -> project -> dir -> file

Public Code (admin-managed shared source corpus)

Tool What it does
list_public_code_sources List configured sources, active revisions, coverage, profiles, and update state
add_public_code_source Register an HTTPS Git upstream using server-side proxy/credential profile references
check_public_code_updates Queue remote revision checks for selected sources or domains
index_public_code_sources Queue bare mirror refresh, AST chunking, shared GPU embedding, and atomic promotion
set_public_code_update_policy Change manual/scheduled update policy without exposing credentials
public_code_job_status Poll durable source/file/chunk progress for checks and indexing
search_public_code Flat domain or exact-repository hybrid/dense/keyword search with full code citations

ACE playbook (accumulated, curated lessons per project)

Tool What it does
ace_context_aware / ace_playbook Retrieve relevant / list all curated bullets
ace_enhance_prompt / ace_smart_generate Attach playbook lessons to a prompt (no LLM call)
ace_smart_reflect Curate a transferable lesson into the playbook (grow-and-refine dedup)

Code KB language coverage

index_code chunks 40+ languages structurally via tree-sitter (chonkie CodeChunker): Python, TypeScript/TSX/JS/JSX (React), Java, Kotlin (incl. Jetpack Compose .kt/.kts), Swift, Go, Rust, C/C++, C#, Ruby, PHP, Lua, Scala, Dart, R, Julia, Elixir, Erlang, Haskell, OCaml, SQL, GraphQL, Protobuf, HTML, CSS/SCSS (Tailwind = CSS classes), Vue, Svelte, shell, PowerShell, Dockerfile, Terraform/HCL, CMake, YAML/JSON/TOML/XML, and more. Grammarless config/text files fall back to line-window chunks; docs (.md) and binaries are skipped (docs belong in the journal via journal_index_dir).

Singleton behavior and command-mode MCP configuration

Use the same command-style stdio entry for Claude, Codex, Grok, and other MCP clients. The normal no-argument invocation automatically starts or reuses one per-user daemon and transparently bridges just this client's JSONL session. No client URL, transport option, or manual start step is required.

Install the published package once and use the same command-style configuration for every client. Existing version-pinned uvx configurations should pin retrieval-mcp==0.4.11.

{
  "mcpServers": {
    "retrieval": {
      "command": "retrieval-mcp",
      "args": []
    }
  }
}

Existing uvx command configurations remain compatible. A once-installed retrieval-mcp avoids a package-runner wrapper per client and is the recommended singleton setup. status and stop are explicit local control commands; retrieval-mcp stdio-server is only a direct debug/compatibility server and is not the normal client configuration.

Automatic code-index refresh

index_code(...) returns a local job ID before repository walking, hashing, AST chunking, upload, GPU embedding, or Qdrant upsert completes. Poll that same ID with index_code_status() through the preparing, backend queue, and terminal phases. A second index request for the same scope reuses the active job instead of starting another scan.

With auto_refresh=True, the client then keeps one filesystem watcher for that absolute repository path. Ordinary file events hash and chunk only the touched paths; ignore-rule changes trigger a full reconcile. search_code() never waits for the watcher or indexing: it returns the last completed snapshot and reports freshness separately.

Git repositories continue to honor Git's ignore rules by default. Any directory, including non-Git projects, can add scope-relative patterns to .retrievalignore; callers can add temporary patterns with exclude_globs=["generated/**", "private.py"]. Explicit delete_code() cancels/fences stale refresh work and removes vectors, inventory, and the saved refresh policy.

Windows drive and UNC scopes use pathlib's Windows path semantics and one case-insensitive canonical identity, while POSIX scope casing remains significant. Historical mixed-case Windows scopes are included through bounded catalog aliases. path_glob is always scope-relative; both slash styles are accepted, and pathspec supplies basename, directory, **, and exact-file matching semantics. Windows extended-length/device spellings (\\?\, \\.\) are rejected with guidance to use the equivalent ordinary drive or UNC path, preventing duplicate scope identities.

Config (env)

Var Default Notes
RETRIEVAL_API_URL http://10.100.100.111:8000 LAN compute box (no key). Off-LAN, set to https://retrieval.rnarket.com.
RETRIEVAL_API_KEY - sk-... key for the gateway (create under /auth/keys). Required off-LAN.
Journal/code scope current absolute directory path The client derives scope from the directory you run or pass to each tool, so projects do not leak into each other.

Paper artifact transport

  • get_paper_markdown(..., save_path=None) returns the complete JSON-backed Markdown to the MCP caller. With save_path, it instead uses the raw GET /api/papers/{paper_id}/markdown file route, so large Markdown is not buffered as JSON by the gateway or MCP process.
  • Markdown files and PDFs use HTTP Range with validated Content-Range. If the connection closes after writing a valid prefix, the next request resumes from the exact local byte offset. Completed files are published atomically and are not overwritten unless overwrite=True.
  • download_papers accepts at most 10 paper IDs, preflights all destination names, disambiguates sanitized filename collisions with a stable digest, and reuses the single-artifact Range paths with at most two concurrent transfers. Errors are reported per paper/artifact.
  • The separate authenticated HTTP POST /api/papers/download-batch endpoint serves a one-shot ZIP for browser/API clients. It is capped at 10 papers and 1 GiB of source artifacts, allows at most two concurrent archive builds, and intentionally rejects Range because each generated archive is a new file.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

retrieval_mcp-0.4.11.tar.gz (99.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

retrieval_mcp-0.4.11-py3-none-any.whl (95.1 kB view details)

Uploaded Python 3

File details

Details for the file retrieval_mcp-0.4.11.tar.gz.

File metadata

  • Download URL: retrieval_mcp-0.4.11.tar.gz
  • Upload date:
  • Size: 99.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.15

File hashes

Hashes for retrieval_mcp-0.4.11.tar.gz
Algorithm Hash digest
SHA256 39d814be63808c6524d6c514f49b9668cc845fed839757d3cc10c9a22d1d1b15
MD5 f51aa46c040e7806c80b5cb7daa62e44
BLAKE2b-256 4616d5c1fa0e5eace6b23bde59ebb684f967b252debd816647bef1a901dd6949

See more details on using hashes here.

File details

Details for the file retrieval_mcp-0.4.11-py3-none-any.whl.

File metadata

File hashes

Hashes for retrieval_mcp-0.4.11-py3-none-any.whl
Algorithm Hash digest
SHA256 3bc713e83434b9b1f8e2e2b3edf77068d34a7e0ec4f89ab171f183b9eb82b928
MD5 fdf8303dd3bdadf9d684ff1125fb7f39
BLAKE2b-256 364f5c9e4bd2b9dafac73dae1e1a441701feb1d74420ed1c094bd78df938406c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.11 This release

2 files

0.4.10

2 files

0.4.9

2 files

0.4.8

2 files

0.4.7

2 files

0.4.6

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.2

1 file

0.3.1

2 files

0.3.0

2 files

0.2.37

2 files

0.2.36

2 files

0.2.35

2 files

0.2.34

2 files

0.2.33

2 files

0.2.32

2 files

0.2.31

2 files

0.2.30

2 files

0.2.29

2 files

0.2.28

2 files

0.2.27

2 files

0.2.26

2 files

0.2.25

2 files

0.2.24

2 files

0.2.23

2 files

0.2.22

2 files

0.2.21

2 files

0.2.20

2 files

0.2.19

2 files

0.2.18

2 files

0.2.17

2 files

0.2.16

2 files

0.2.15

2 files

0.2.14

2 files

0.2.13

2 files

0.2.12

2 files

0.2.11

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page