Paparats MCP: Self-Hosted Semantic Code Search
What it does
Self-hosted semantic code search MCP for Claude Code & Cursor. Multi-repo, AST-aware, stays local.
- Connects 내 컴퓨터에서 실행
- Account or key No key needed
- Category 검색 및 AI 기억
설치
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
검사 3/3 통과 · 내 컴퓨터에서 실행돼요
먼저: 어떤 AI를 쓰시나요?
쓰는 앱을 고르면 아래에 단계가 나옵니다.
Claude에 연결할 수 있지만 먼저 준비가 필요해요
먼저 컴퓨터에 Node.js를 설치하세요 (한 번만) · 컴퓨터용 Claude 앱(Windows 또는 Mac)에서만 되고 웹이나 모바일은 안 돼요
컴퓨터용 Claude 앱 설정 파일 열기
SettingsDeveloperEdit Config
이 설정을 붙여 넣고 저장
{ "mcpServers": { "paparats": { "command": "npx", "args": [ "-y", "@paparats/cli" ] } } }Claude를 끄고 다시 열기
해 보기
Paparats MCP: Self-Hosted Semantic Code Search을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude가 Paparats MCP: Self-Hosted Semantic Code Search을 쓰고 있다고 하거나 답에 Paparats MCP: Self-Hosted Semantic Code Search 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
ChatGPT는 아직 Paparats MCP: Self-Hosted Semantic Code Search에 연결할 수 없어요
Paparats MCP: Self-Hosted Semantic Code Search는 내 컴퓨터에 설치해서 쓰지만 ChatGPT는 웹에서 도는 서버만 연결할 수 있어요
대신 이렇게 할 수 있어요
A · Paparats MCP: Self-Hosted Semantic Code Search에 연결되는 앱 쓰기
- 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만) · 컴퓨터용 Claude 앱(Windows 또는 Mac)에서만 되고 웹이나 모바일은 안 돼요
- 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
- 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
- 먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
B · 검색 및 AI 기억에서 ChatGPT에 연결되는 다른 서버
같은 분류에서 많이 쓰는 것 중 키 없이 주소만으로 연결되는 것을 골랐어요
- Context7✓ ChatGPT
- AIHOT✓ ChatGPT
- Sui Knowledge Base (kapa.ai)✓ ChatGPT
Claude Code에 연결할 수 있지만 먼저 준비가 필요해요
먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
터미널 열기
Mac: Command+스페이스를 누르고 Terminal 입력 · Windows: PowerShell 열기
이 명령을 붙여 넣고 Enter
claude mcp add --scope user paparats -- npx -y @paparats/cliClaude Code에서 /mcp 입력
Paparats MCP: Self-Hosted Semantic Code Search이 목록에 있고 연결됨으로 보이면 돼요
해 보기
Paparats MCP: Self-Hosted Semantic Code Search을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Claude Code가 Paparats MCP: Self-Hosted Semantic Code Search을 쓰고 있다고 하거나 답에 Paparats MCP: Self-Hosted Semantic Code Search 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Anthropic 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Cursor에 연결할 수 있지만 먼저 준비가 필요해요
먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
Cursor에서 AI 채팅을 Agent 모드로 열기
해 보기
Paparats MCP: Self-Hosted Semantic Code Search을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ Cursor가 Paparats MCP: Self-Hosted Semantic Code Search을 쓰고 있다고 하거나 답에 Paparats MCP: Self-Hosted Semantic Code Search 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 Cursor 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
VS Code에 연결할 수 있지만 먼저 준비가 필요해요
먼저 컴퓨터에 Node.js를 설치하세요 (한 번만)
VS Code에서 AI 채팅을 Agent 모드로 열기
해 보기
Paparats MCP: Self-Hosted Semantic Code Search을 써서 나에게 무엇을 해 줄 수 있는지 알려 주고, 하나 해 봐✓ VS Code가 Paparats MCP: Self-Hosted Semantic Code Search을 쓰고 있다고 하거나 답에 Paparats MCP: Self-Hosted Semantic Code Search 도구 이름이 나오면 연결된 거예요
메뉴 이름은 2026년 11월 11일에 VS Code 도움말에서 확인 · 앱 버전에 따라 화면이 조금 다를 수 있어요
Windsurf, Zed, Gemini CLI 같은 다른 MCP 앱은 추가 방법이 저마다 달라요. 앱 목록에서 확인하세요
JSON 설정은 아래 “개발자용”에 있어요
개발자용: 터미널 명령과 JSON 설정
컴퓨터에 설치
Claude Code
claude mcp add --scope user paparats -- npx -y @paparats/cliClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"paparats": {
"command": "npx",
"args": [
"-y",
"@paparats/cli"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"paparats": {
"command": "npx",
"args": [
"-y",
"@paparats/cli"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"paparats": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@paparats/cli"
]
}
}
}이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
한눈에 보기
- 주간 다운로드i
- 928/주
- 연결 방식
- 내 컴퓨터에서 실행
- 전송 방식
- streamable-http
- 최신 버전i
- 2.18.2
- 카테고리i
- 검색 및 AI 기억
- 레지스트리 공개i
- 2026년 11월 4일
- 코드 마지막 변경i
- 2026년 11월 4일
- 제작자
- IBazylchuk
- 패키지
npm: @paparats/cli- 웹사이트
- github.com
- 레지스트리 상태
- 활성
어떤 앱에서 쓸 수 있나요
이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.
내 컴퓨터에서 실행하는 앱
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
할 수 있는 일
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
기본 점검i
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 12일 점검
- ✓ 통과
제작자와 저장소 일치
레지스트리 이름이 GitHub 계정 IBazylchuk 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
- ✓ 통과
계속 관리되고 있음
코드 마지막 변경: 8일 전
- ✓ 통과
라이선스 있음
MIT 사용
- – 해당 없음
엔드포인트 응답
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
- – 해당 없음
OAuth로 로그인
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
- … 아직 점검 안 함
도구 설명에 숨겨진 지시 없음
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
토론
질문하고, 팁을 나누고, 안 되는 점을 알려 주세요. "도움이 됨"이 많은 순서예요.
사용자 리뷰
아직 리뷰가 없어요
검색 및 AI 기억 카테고리의 다른 서버와 비교i
- 이 카테고리의 다른 서버 6009개 중 91%보다 스타가 많아요
- 이 카테고리의 다른 서버 6009개 중 82%보다 최근에 레지스트리에 공개됐어요
- 기본 점검 결과가 이 카테고리의 다른 서버 6009개 중 100%와 같거나 더 좋아요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
자주 묻는 질문
Paparats MCP: Self-Hosted Semantic Code Search, 안전한가요?
해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
어떤 키나 코드가 필요한가요?
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
아직 관리되고 있나요?
GitHub 저장소는 마지막으로 8일 전 변경됐고, 최신 버전(2.18.2)은 8일 전 레지스트리에 올라왔어요.
어떤 앱에서 쓸 수 있나요?
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
대신 쓸 수 있는 건 뭐가 있나요?
같은 카테고리에는: Context7, Codebase Memory, Ruflo
같은 카테고리의 다른 것
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Codebase Memory
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
제작자의 README
README 열기
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
@paparats/server
The MCP server for Paparats MCP — semantic code search over multiple repos with AST-aware chunking, a cross-chunk symbol graph, git-history per chunk, and an agent-maintained architectural memory layer.
Not published to npm. This package is consumed as a library by
@paparats/indexer
and shipped as a Docker image:
ibaz/paparats-server.
End users install through
@paparats/cli.
What this package does
Three jobs in one process:
- Indexer. AST-aware chunking (tree-sitter, 11 languages), per-chunk symbol extraction, single-parse pipeline, llama-server embedding with SQLite cache, batched Qdrant upsert. Post-index passes attach git history, ticket references, and cross-chunk symbol edges (calls / called_by / references / referenced_by).
- Searcher. Task-prefixed embedding (
nl2code/code2code/techqa), query expansion for the support tools (abbreviations, case variants, plurals, filler removal), in-memory LRU query cache with per-group invalidation, confidence scoring, token-savings telemetry. - MCP server. Three endpoints —
/mcp(coding),/support/mcp(support) and the opt-in, docs-only/knowledge/mcp(knowledge) — each with its own tool set and system instructions. Streamable HTTP for every client, with legacy SSE routes kept. Plus an agent-maintained architectural memory layer.
Endpoints
http://<host>:9876/health – liveness probe
http:// :9876/metrics – Prometheus (PAPARATS_METRICS=true) http:// :9876/ui – operator console http:// :9876/api/analytics/... – analytics REST API (UI backend)
http:// :9876/mcp – MCP, coding mode (Streamable HTTP) http:// :9876/sse – MCP, coding mode (legacy SSE) http:// :9876/messages – MCP, coding mode (SSE message channel)
http:// :9876/support/mcp – MCP, support mode http:// :9876/support/sse – MCP, support mode (SSE) http:// :9876/support/messages – MCP, support mode (SSE message channel)
http:// :9876/knowledge/mcp – MCP, knowledge mode (stateless, bearer auth, POST only; mounted only when configured)
POST /api/index registers a project; POST /api/file-changed and POST /api/file-deleted update single files. See docs/tools.md for the full tool inventory per endpoint.
Knowledge mode
A docs-only MCP endpoint for a consumer in another network — an agent backend behind a load balancer that may search curated documentation and nothing else. Off unless PAPARATS_KNOWLEDGE_TOKENS and PAPARATS_KNOWLEDGE_AUDIENCE are both set; one without the other stops the server at startup.
- Tools:
search_docsandget_documentonly. No glossary block, no resources, no workflow prompts.search_docsreturnsstructuredContentwith anoutputSchema, so a wrapping service can build citations without parsing markdown. - Auth:
Authorization: Bearer, compared in constant time, checked before the request body is read.401+WWW-Authenticate: Bearerotherwise. - Scope: documents labelled with an audience in
PAPARATS_KNOWLEDGE_AUDIENCE(neverinternal), in the projects ofPAPARATS_KNOWLEDGE_PROJECTSwhen set. Both are intersected withPAPARATS_DOCS_AUDIENCE/PAPARATS_PROJECTSwhen those are set. Out-of-scope documents read exactly like missing ones. - Transport: stateless Streamable HTTP — a fresh server and transport per
POST, no session id;GET/DELETEanswer405. 64 kB body limit, 1000-character query cap.
Documents get their audience at index time: frontmatter audience: first, then docs.audience from .paparats.yml / projects.yml, otherwise internal. An invalid frontmatter value is logged and stored as internal. See the documentation search guide.
Set `PAPARATS_KNOWLEDGE_PROJECTS` — otherwise a stray audience: in some code repository's README is enough to widen what the endpoint serves.
Expose only that path, POST only. For example with nginx:
location = /knowledge/mcp {
limit_except POST { deny all; } client_max_body_size 64k; proxy_pass http://paparats:9876; proxy_http_version 1.1; proxy_buffering off; # responses stream as text/event-stream } location / { return 404; }
Architectural memory
Code search tells the agent what the code does. The arch-memory layer tells it why — and the agent maintains that knowledge itself, across sessions, without you authoring a single doc.
Three card kinds in a separate Qdrant collection per group (paparats_ _arch), embedded with qwen3-embedding-0.6b (1024d, last-pooled):
| Kind | Fields | Idempotency |
|---|---|---|
| Component | name, summary (markdown: Does / Owns / Does not / Touched when), files, neighbours, anchors | By name (structural) |
| Decision | title, context, decision, alternatives_rejected, consequences, scope, supersedes | Server-side similarity gate |
| Lesson | rule, why, when, scope, severity, evidence | Server-side similarity gate |
Similarity gate (cosine on qwen3-embedding-0.6b):
>= 0.85→ duplicate. Decisions are refused so the agent must reconcile or supersede. Lessons bumpupdatedAton the existing card (Reflexion "rule confirmed").0.70 – 0.85→ similar. Nothing is written; the agent should refine wording or passsupersedes.< 0.70→ accepted as a new card.
supersedes bypasses the gate and marks the prior decision status=superseded so it disappears from default search but stays in history.
Reading via `arch_context` accepts min_score (default 0.45). Each returned card carries an updated N ago stamp and the cosine score so the agent can detect stale or low-confidence hits.
Bootstrap with `init_arch_memory` — a workflow prompt analogous to /init in Claude Code. Walks the repo, identifies 8-20 components by domain boundary, writes the cards. Followed by audit_architecture (sweep stale cards) and record_lesson_from_correction (turn user corrections into structured lessons).
MCP resources:
arch://schema— full card-schema reference.arch://stats/{group}— live counts (total / by kind / by status) and oldest/newestupdatedAt.
Prometheus metrics (PAPARATS_METRICS=true):
paparats_arch_context_calls_total{group}— counterpaparats_arch_write_total{kind, status}— counter labelled by gate outcomepaparats_arch_search_score— histogram of cosine scores fromarch_contextpaparats_arch_collection_size{group, kind, status}— gauge
arch_context is read-only on both MCP endpoints. arch_record_* is support-only — recording belongs to the architectural-review workflow.
Module map
| Module | Responsibility |
|---|---|
types.ts | Shared interfaces |
lib.ts | Public library entry point (re-exports for programmatic use) |
config.ts | .paparats.yml reader, 11 language profiles, autoProjectConfig() |
app.ts | Express app factory, HTTP API routes, request wiring |
index.ts | Server bootstrap — starts HTTP server, wires components, graceful shutdown |
ast-chunker.ts | AST-based chunking via tree-sitter |
chunker.ts | Regex chunking fallback (4 strategies) |
ast-symbol-extractor.ts | AST-based per-chunk symbol extraction |
ast-queries.ts | Tree-sitter S-expression queries per language |
tree-sitter-parser.ts | WASM tree-sitter manager — lazy grammar loading |
symbol-graph.ts | Cross-chunk symbol edges |
embeddings.ts | llama-server provider + SQLite cache + cached wrapper |
indexer.ts | Group-aware Qdrant indexing — createQdrantClient(), toCollectionName(), single-parse chunkFile() |
searcher.ts | Vector search, query expansion (support tools only), cache, metrics |
query-expansion.ts | Abbreviation / case / plural / filler expansion |
task-prefixes.ts | Query-type detection + bge-code-v1 / Qwen3 query instructions |
query-cache.ts | In-memory LRU cache with TTL and per-group invalidation |
metrics.ts | Prometheus metrics (prom-client) + NoOpMetrics fallback |
metadata.ts | Tag resolution + auto-detection from directory structure |
metadata-db.ts | SQLite store for git commits, tickets, symbol edges |
git-metadata.ts | Git history extraction — diff-hunk mapping to chunks |
ticket-extractor.ts | Jira / GitHub / custom ticket parsing |
mcp-handler.ts | MCP protocol — coding, support and knowledge endpoints with isolated tool sets and instructions |
knowledge-mode.ts | Knowledge mode — env parsing, bearer auth, body limit, scope intersection |
arch/types.ts | Architectural-memory types |
arch/collection.ts | Per-group paparats_ _arch collection lifecycle |
arch/text-embeddings.ts | qwen3-embedding-0.6b text embedder via llama-server |
arch/store.ts | CRUD + server-side similarity gate + stats() aggregation |
| arch/context.ts | arch_context query