ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Paparats MCP: Self-Hosted Semantic Code Search

โดย IBazylchukรุ่น 2.18.2i★ –iรันบนเครื่อง
ชื่อใน registryio.github.IBazylchuk/paparats-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Self-hosted semantic code search MCP for Claude Code & Cursor. Multi-repo, AST-aware, stays local.

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): Streamable HTTP
  • หมวด: ค้นข้อมูลและความจำของ AI

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ต้องเตรียมก่อน

  • npmติดตั้ง Node.js (มีคำสั่ง npx) ในเครื่อง

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json

{
  "mcpServers": {
    "paparats": {
      "command": "npx",
      "args": [
        "-y",
        "@paparats/cli"
      ]
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add paparats -- npx -y @paparats/cli

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "paparats": {
      "command": "npx",
      "args": [
        "-y",
        "@paparats/cli"
      ]
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "paparats": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@paparats/cli"
      ]
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub IBazylchuk ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด ค้นข้อมูลและความจำของ AIi

  • ดาวมากกว่า 0% ของอีก 5761 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 88% ของอีก 5761 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 5761 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Paparats MCP: Self-Hosted Semantic Code Search ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (2.18.2) เข้า registry 5 วันที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Context7, Codebase Memory, Exa

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Context7

ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว

โดย upstashใช้กันมาก↓ 972.7K/สัปดาห์★ 64.2Kอัปเดต 3 วันที่ผ่านมา

บนเครื่องหรือคลาวด์

Codebase Memory

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

โดย DeusDataใช้กันมาก↓ 18K/สัปดาห์★ 48.1Kอัปเดต 23 วันที่ผ่านมา

รันบนเครื่อง

Exa

Connect AI agents to Exa for web search, content fetching, and multi-step research.

โดย exa-labsใช้กันมาก★ 5.2Kอัปเดต 2 เดือนที่ผ่านมา

รันบนคลาวด์✓ exa.ai

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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_docs and get_document only. No glossary block, no resources, no workflow prompts. search_docs returns structuredContent with an outputSchema, 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: Bearer otherwise.
  • Scope: documents labelled with an audience in PAPARATS_KNOWLEDGE_AUDIENCE (never internal), in the projects of PAPARATS_KNOWLEDGE_PROJECTS when set. Both are intersected with PAPARATS_DOCS_AUDIENCE / PAPARATS_PROJECTS when 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/DELETE answer 405. 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):

KindFieldsIdempotency
Componentname, summary (markdown: Does / Owns / Does not / Touched when), files, neighbours, anchorsBy name (structural)
Decisiontitle, context, decision, alternatives_rejected, consequences, scope, supersedesServer-side similarity gate
Lessonrule, why, when, scope, severity, evidenceServer-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 bump updatedAt on the existing card (Reflexion "rule confirmed").
  • 0.70 – 0.85 → similar. Nothing is written; the agent should refine wording or pass supersedes.
  • < 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/newest updatedAt.

Prometheus metrics (PAPARATS_METRICS=true):

  • paparats_arch_context_calls_total{group} — counter
  • paparats_arch_write_total{kind, status} — counter labelled by gate outcome
  • paparats_arch_search_score — histogram of cosine scores from arch_context
  • paparats_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

ModuleResponsibility
types.tsShared interfaces
lib.tsPublic library entry point (re-exports for programmatic use)
config.ts.paparats.yml reader, 11 language profiles, autoProjectConfig()
app.tsExpress app factory, HTTP API routes, request wiring
index.tsServer bootstrap — starts HTTP server, wires components, graceful shutdown
ast-chunker.tsAST-based chunking via tree-sitter
chunker.tsRegex chunking fallback (4 strategies)
ast-symbol-extractor.tsAST-based per-chunk symbol extraction
ast-queries.tsTree-sitter S-expression queries per language
tree-sitter-parser.tsWASM tree-sitter manager — lazy grammar loading
symbol-graph.tsCross-chunk symbol edges
embeddings.tsllama-server provider + SQLite cache + cached wrapper
indexer.tsGroup-aware Qdrant indexing — createQdrantClient(), toCollectionName(), single-parse chunkFile()
searcher.tsVector search, query expansion (support tools only), cache, metrics
query-expansion.tsAbbreviation / case / plural / filler expansion
task-prefixes.tsQuery-type detection + bge-code-v1 / Qwen3 query instructions
query-cache.tsIn-memory LRU cache with TTL and per-group invalidation
metrics.tsPrometheus metrics (prom-client) + NoOpMetrics fallback
metadata.tsTag resolution + auto-detection from directory structure
metadata-db.tsSQLite store for git commits, tickets, symbol edges
git-metadata.tsGit history extraction — diff-hunk mapping to chunks
ticket-extractor.tsJira / GitHub / custom ticket parsing
mcp-handler.tsMCP protocol — coding, support and knowledge endpoints with isolated tool sets and instructions
knowledge-mode.tsKnowledge mode — env parsing, bearer auth, body limit, scope intersection
arch/types.tsArchitectural-memory types
arch/collection.tsPer-group paparats_ _arch collection lifecycle
arch/text-embeddings.tsqwen3-embedding-0.6b text embedder via llama-server
arch/store.tsCRUD + server-side similarity gate + stats() aggregation

| arch/context.ts | arch_context query

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx