ContextSmith
概要
作者による説明(英語の原文)
Give your coding agent the right code: graph + hybrid search, packed into a token budget. Local.
PopNx MCPの3つの柱
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
- 利用者の声iレビューはまだありませんログインした利用者のレビュー。レビューが付くと平均が表示されます
- 私たちの基本チェックi2項目中2項目に合格公開情報からチェック。コードはまだスキャンしていません
- 利用状況iとても新しい↓ 32/週 · ★ 0
できること
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
- 接続方法: パソコンで動く
- トランスポート: stdio
- カテゴリ: 開発者ツール
インストール
使っているAIアプリを選んで、設定をコピーしてください。
インストールの前に
- 基本チェック:2項目中2項目に合格
- あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
- 自分で入力するもの:
CTXSMITH_ROOT
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"contextsmith": {
"command": "uvx",
"args": [
"contextsmith"
],
"env": {
"CTXSMITH_ROOT": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add contextsmith --env CTXSMITH_ROOT=your-value -- uvx contextsmith動かす前に、空欄の値を入力してください。
または、設定を自分でコピーする
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"contextsmith": {
"command": "uvx",
"args": [
"contextsmith"
],
"env": {
"CTXSMITH_ROOT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
または、設定を自分でコピーする
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"contextsmith": {
"type": "stdio",
"command": "uvx",
"args": [
"contextsmith"
],
"env": {
"CTXSMITH_ROOT": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
自分で入力する値
CTXSMITH_ROOTenvRepository to index and answer from (default: the working directory)
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
使えるアプリ
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月11日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント RahulSankhla312 で確認済みです
- ✓ 合格
今もメンテナンスされている
コードの最終更新:16 日前
- … 未チェック
ライセンスがある
このリポジトリはまだGitHubから読み取っていません
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
話し合い
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
ユーザーレビュー
まだレビューはありません
開発者ツールのほかのサーバーとの比較i
- このカテゴリのほかの5742件のうち0%よりスターが多い
- このカテゴリのほかの5742件のうち61%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5742件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
ContextSmithは安全ですか?
当てはまる基本チェック2項目のうち2項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は16 日前、最新バージョン(0.1.1)がレジストリに届いたのは16 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
代わりに使えるものは?
同じカテゴリには:REA, Netdata, Front-End Checklist
代わりの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Front-End Checklist
Review frontend code and live pages against 386 quality-gated web development rules.
作者のREADME
READMEを開く
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
ContextSmith
Give your coding agent the right code, not more code.
A local context engine for Claude Code, Cursor, Codex and any MCP agent. It indexes your repository into a code graph, hybrid search and git history, and answers every task with the code that matters, packed into a token budget you choose.
▶ Watch the 60-second video : indexing, context packing, live MCP calls and the benchmark.
Coding agents spend their context window on the wrong code. They grep, open whole files, and run out of room before they reach the function that needs the fix, and you pay for every token they read. ContextSmith answers one question as well as possible: given this task and N tokens, what code should the agent read?
92% of real bug fixes had the right file inside a 4,000-token context vs 29% for search + whole files 1.7x more often the exact lines to change are shown 48% vs 29%, same budget 100% local no API keys, no cloud, code never leaves the machine
Measured on 114 Django issues from SWE-bench Lite that no tuning step ever saw. Method and full results .
Quickstart (60 seconds)
pipx install "contextsmith[semantic]" # or: pip install "contextsmith[semantic]"
cd your-repo ctxsmith index # once; afterwards only changed files are re-read ctxsmith context "Coupons are applied twice at checkout" --budget 4000
Connect it to your agent (the command prints the exact line for your machine):
ctxsmith mcp-config claude # or: cursor, windsurf, codex
claude mcp add contextsmith -- ctxsmith serve --path /path/to/your-repo
From then on the agent calls get_context itself and gets ranked, budgeted code instead of grepping. Without the [semantic] extra everything still works, using keyword search only.
Who it's for
Developers
- Faster, better agent sessions on big repos. The agent starts from the right functions instead of exploring; fewer wrong edits and "I couldn't find it" loops.
- Understand unfamiliar code.
ctxsmith context "where are payment retries handled?"returns the relevant functions with their file and line numbers. - Change safely.
ctxsmith impact charge_cardlists everything that calls it, transitively: what a change could break, before you make it. - Remember the gotchas.
ctxsmith note add "never call without the account lock" --symbol charge_cardpins a note to the code; it shows up in every future context for that code, for you and for the agent.
Teams and companies
| Need | How ContextSmith covers it |
|---|---|
| Code that must not leave the building (finance, health, government, enterprise IP) | Runs entirely on the developer's machine. Parsing, search and embeddings are local; the only network use is a one-time download of two small open models, which you can mirror internally for air-gapped machines |
| Predictable AI spend | Every answer has a hard token budget you set, so context cost per task is fixed instead of "whatever the agent opened" |
| Works with the agents you already pay for | Standard MCP server: Claude Code, Cursor, Windsurf, Codex, Copilot agents and in-house agents use the same index |
| Onboarding | New engineers and their agents ask questions in plain language and land on the right code |
| Code review and CI | ctxsmith context "$PR_TITLE" -b 6000 gives a review bot the code a PR touches and depends on; ctxsmith impact NAME shows the blast radius |
| Team knowledge | Decisions and invariants live next to the code as notes, not in someone's head |
| No lock-in, no procurement | MIT licence (commercial use is fine), a single SQLite file per repository, no server to run, no account |
Typical rollout: each developer installs it with pipx, runs ctxsmith index in the repositories they work on, and adds one MCP line to their agent. There is nothing to host. See Using it at a company for CI and offline setups.
Builders of AI tools
ContextSmith is also a Python library. Use it as the retrieval layer of your own agent, review bot or internal assistant:
from contextsmith import Engine
eng = Engine("path/to/repo") eng.index() pack = eng.context("Fix the race when two users book the last seat", budget=6000) prompt = f"{pack.text}\n\nTask: fix the race when two users book the last seat."
Results
The test: take a real GitHub issue from SWE-bench Lite, check the repository out at the issue's own commit (so no future code or history leaks in), give the issue text to the tool, and check whether the code the real fix changed comes back.
Final test on Django: 114 issues that no tuning step ever saw.
| BM25, whole files | ContextSmith | |
|---|---|---|
| The fix's file is ranked 1st / in the top 3 / top 5 | 50.9% / 70.2% / 77.2% | 51.8% / 79.8% / 85.1% |
| The fix's file is inside a 4,000-token context | 28.9% | 92.1% (3.2x) |
| The exact lines the fix changes are shown in 4,000 tokens | 28.9% | 48.1% (1.7x) |
| Query time (median, laptop CPU, 2,800-file repository) | 145 ms | 238 ms |
The baseline pastes BM25-ranked files whole until the budget runs out, which is what "search the repo and open files" agents do. ContextSmith spends the same tokens on the functions that matter and outlines of the rest, so the right file almost always makes it in.
All strategies and ablations
| strategy | R@1 | R@3 | R@5 | R@10 | file in 4k | file in 8k | lines in 4k | lines in 8k | ms |
|---|---|---|---|---|---|---|---|---|---|
| BM25, whole files | 50.9 | 70.2 | 77.2 | 84.2 | 28.9 | 49.1 | 28.9 | 49.1 | 145 |
| lexical (no embeddings) | 48.2 | 74.6 | 78.9 | 86.0 | 86.0 | 89.5 | 42.3 | 46.2 | 145 |
| embeddings only | 48.2 | 69.3 | 78.9 | 86.8 | – | – | – | – | 249 |
| ContextSmith (default) | 51.8 | 79.8 | 85.1 | 88.6 | 92.1 | 96.5 | 48.1 | 50.7 | 238 |
| + cross-encoder re-rank | 34.2 | 73.7 | 81.6 | 91.2 | – | – | – | – | 1824 |
| without git history | 56.1 | 78.9 | 84.2 | 90.4 | – | – | – | – | 249 |
Full numbers: bench/results-django/summary.md.
What the ablations say, including what didn't work:
- Embeddings earn their place: adding them to the lexical ranker lifts top-5 from 79% to 85% and exact-line coverage from 42% to 48%.
- The cross-encoder re-rank hurts the top result (52% → 34%) at 8x the latency, so it is off by default and marked experimental. A general web-search re-ranker doesn't understand issue-to-code relevance; a code-trained one is on the roadmap.
- Git commit history is mixed: it helped on the tuning repositories, but on Django removing it *raises* recall@1 by 4 points. It stays on because the default was fixed before the Django run; changing it now would be tuning on the test set.
- At 8,000 tokens whole files catch up on exact lines (49% vs 51%): every Django fix here touches one file, and at that budget it often fits whole.
Method. Weights were chosen by grid search on 89 issues from 8 other repositories (pytest, requests, flask, sphinx, pylint, xarray, astropy, seaborn) with bench/tune.py and bench/tune_pack.py, then frozen before Django was run once. Reproduce it with ctxsmith bench --repos django/django (first run: about two hours on a laptop).
How it works
flowchart LR
subgraph Index["ctxsmith index (incremental)"] TS["tree-sitter 7 languages"] --> SYM["symbols · calls · imports"] SYM --> G["call graph PageRank"] SYM --> FTS["FTS5 BM25 files · symbols · bodies"] SYM --> EMB["ONNX embeddings symbol summaries"] EMB --> VEC["sqlite-vec cosine index"] GIT["git log"] --> H["commit-message index co-change pairs"] end subgraph Query["get_context(task, budget)"] Q["task text"] --> S1["file BM25"] & S2["semantic kNN"] & S3["paths in task"] & S4["history BM25"] S1 & S2 & S3 & S4 --> RRF["reciprocal-rank fusion"] RRF --> KS["knapsack packer value per token"] KS --> OUT["≤ N tokens of code"] end Index -. one SQLite file .-> Query
One SQLite file per repository holds everything: files, symbols, call and import edges, three FTS5 indexes, git statistics, team notes, and the vector index (a vec0 virtual table from sqlite-vec; a numpy fallback runs where SQLite can't load extensions).
Retrieval (RAG). Each signal produces its own ranked list of files; reciprocal-rank fusion combines them, so no single noisy signal dominates:
| Signal | What it catches |
|---|---|
BM25 over whole files (camelCase/snake_case split, paths weighted up) | exact vocabulary |
Semantic kNN over symbol summaries (BAAI/bge-small-en-v1.5, ONNX, CPU) | the same idea in different words |
Paths named in the task (tracebacks, "in foo/bar.py") | explicit pointers |
| BM25 over each file's commit messages | "this was touched for a similar bug before" |
| Co-change, call-graph neighbours, PageRank, exact-name mentions | available as weights; off by default because the benchmark showed they hurt *file* ranking |
The weights come from a grid search (bench/tune.py) on 89 SWE-bench Lite issues from 8 repositories and were then checked on Django, which tuning never saw.
What gets embedded, and why. Not whole files and not raw chunks: one short summary per function or class — path, qualified name, signature, first docstring sentence. On a laptop CPU this is ~30x cheaper than embedding bodies, and it is what identifies "which function is this about". Vectors are cached by content hash, so a function that didn't change is never embedded twice — across re-indexes and across git checkouts. Test files are skipped.
Experimental re-rank. ctxsmith context --rerank re-scores the top 20 files with a cross-encoder (ms-marco-MiniLM-L-6-v2). It is off by default because the benchmark shows it hurts (see Results).
Packing. Candidates are function bodies (matched by name, docstring and body text), class outlines and file outlines. A greedy knapsack takes the best value per token, discounts repeats from one file, and enforces the budget on the final rendered text, so the answer is never over budget.
Always fresh. Re-indexing compares file size and mtime before reading anything and only re-parses and re-embeds what changed; checking an unchanged 2,800-file repository takes about half a s