Context7
Up-to-date docs for AI agents
제작자가 쓴 설명(영어 원문)
Code-pinned team memory for AI coding agents — typed artifacts, MCP-native, self-host.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
PINDOC_DATABASE_URL, PINDOC_BIND_ADDR필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"pindoc": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PINDOC_DATABASE_URL",
"-e",
"PINDOC_BIND_ADDR",
"ghcr.io/var-gg/pindoc:0.2.0"
],
"env": {
"PINDOC_DATABASE_URL": "your-value",
"PINDOC_BIND_ADDR": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add pindoc --env PINDOC_DATABASE_URL=your-value --env PINDOC_BIND_ADDR=your-value -- docker run -i --rm -e PINDOC_DATABASE_URL -e PINDOC_BIND_ADDR ghcr.io/var-gg/pindoc:0.2.0실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"pindoc": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PINDOC_DATABASE_URL",
"-e",
"PINDOC_BIND_ADDR",
"ghcr.io/var-gg/pindoc:0.2.0"
],
"env": {
"PINDOC_DATABASE_URL": "your-value",
"PINDOC_BIND_ADDR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"pindoc": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PINDOC_DATABASE_URL",
"-e",
"PINDOC_BIND_ADDR",
"ghcr.io/var-gg/pindoc:0.2.0"
],
"env": {
"PINDOC_DATABASE_URL": "your-value",
"PINDOC_BIND_ADDR": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
PINDOC_BIND_ADDR env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 GitHub 계정 var-gg 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: PINDOC_DATABASE_URL
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.2.0)은 6개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Docker도 있어야 해요.
같은 카테고리에는: Context7, Codebase Memory, Exa
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Code-pinned team memory for AI-assisted development.
Agents write the durable record; humans review, discuss, and steer.
Pindoc is a self-hosted project memory system for teams working with AI coding agents. It turns useful agent discoveries into typed artifacts: decisions, debugging paths, task closeouts, verification notes, and code-linked analyses. Every artifact is scoped to a project area and pinned back to commits, files, URLs, resources, or related Pindoc artifacts.
It is still the wiki you never type into, but the point is not automation for its own sake. Pindoc keeps the parts of agent work that teammates and future agents can reuse.
AI coding sessions are productive, but team context still falls through the cracks:
Pindoc turns agent work worth keeping into searchable, code-pinned team memory. The next teammate or coding agent can ask Pindoc what matters before it edits.
pindoc.context_for_task, pindoc.artifact.propose, and pindoc.task.queue regulate agent behavior instead of acting as a thin CRUD API./mcp endpoint can serve multiple projects; each tool call carries project_slug.A read-only public demo is a follow-up track and is not part of this OSS release. Until it ships, the README, docs/, and a self-hosted clone are the primary proof. Operators who want to evaluate Pindoc end-to-end run docker compose up -d --build and inspect their own artifacts.
The follow-up demo plan stays in Public Demo Plan for when a hosted instance is appropriate.
Prerequisites:
The default Docker path includes semantic search through a bundled EmbeddingGemma Q4 ONNX provider, so no embedding sidecar is required. See System Requirements for minimum and optional deployment profiles.
git clone https://github.com/var-gg/pindoc.git
cd pindoc docker compose up -d --build
To make the running daemon report the exact source revision, pass the current commit through the Compose build argument before building:
export PINDOC_BUILD_COMMIT="$(git rev-parse HEAD)"
docker compose up -d --build
PowerShell users can set the same value with $env:PINDOC_BUILD_COMMIT = git rev-parse HEAD. make compose-up performs this stamping automatically.
Open the Reader:
http://localhost:5830/
Check that the database ledger matches the migrations embedded in the image:
docker compose exec pindoc-server-daemon pindoc-admin schema doctor --json
The command is read-only and exits non-zero for unknown applied migrations, pending migrations, or checksum drift. It never deletes or accepts an unknown schema change automatically.
Preview and repair semantic indexes that are unknown, stale, failed, or were built with a different embedding model:
docker compose exec pindoc-server-daemon pindoc-reembed -dry-run -state needs-refresh
docker compose exec pindoc-server-daemon pindoc-reembed -state needs-refresh
Pindoc records the indexed revision, title/body hashes, model identity, attempt count, and last error in artifact_index_state. Embeddings are fully prepared before old chunks are replaced. If the provider fails, the artifact write can still succeed with index_state.status="failed" and retryable=true, while the last known-good chunks remain searchable. The re-embed command handles each artifact in its own transaction and exits non-zero if any retry still fails.
On a fresh instance, / first asks for the owner identity (display name and email), then routes to the first-project wizard. To open the project wizard directly after identity setup:
http://localhost:5830/projects/new?welcome=1
Older builds could create a project through POST /api/projects without a matching project_members owner row. After upgrading, repair any affected project by assigning the configured loopback owner:
INSERT INTO project_members (project_id, user_id, role)
SELECT p.id, s.default_loopback_user_id::uuid, 'owner' FROM projects p CROSS JOIN server_settings s WHERE p.slug = ' ' AND s.default_loopback_user_id IS NOT NULL ON CONFLICT (project_id, user_id) DO UPDATE SET role = 'owner';
The Docker daemon exposes one account-level MCP endpoint:
{
"mcpServers": { "pindoc": { "type": "http", "url": "http://127.0.0.1:5830/mcp" } } }
Project scope is not encoded in the URL. Agents pass project_slug on project-scoped tool calls. Workspaces generated by pindoc.harness.install store that slug in PINDOC.md frontmatter. pindoc.workspace.detect resolves the likely slug for the current workspace, but it does not mutate the daemon-wide PINDOC_PROJECT default. In a multi-project Docker daemon, keep passing the detected project_slug explicitly after the session sweep.
completeness=draft is a maturity/trust state, not an unpublished private draft. Accepted MCP writes are still published and Reader-visible when visibility allows. Use visibility=private or the review workflow for content that must not appear on the normal user surface.
Ask an agent to start work with project context:
Use Pindoc context before editing. Find the current project, inspect assigned
Tasks, then implement the next acceptance item.
Typical MCP loop:
pindoc.workspace.detectpindoc.task.queuepindoc.context_for_taskpindoc.artifact.proposepindoc.asset.upload(local_path=...) reads paths from the MCP server host/container, not from the Windows client. For Docker Desktop, copy the host file into the pindoc-server-daemon container first:
pwsh -File tools/push-asset.ps1 A:\path\image.png -ProjectSlug survival-manager
The script prints the JSON input for pindoc.asset.upload, including the container-local /tmp/pindoc-asset-upload/... path.
For Reader-visible inline images, two steps are intentionally separate:
in body_markdown; this controls rendering.pindoc.asset.attach with role="inline_image"; this records revision metadata and evidence.The default Docker path is single-user and loopback-only:
| Variable | Default | Purpose |
|---|---|---|
PINDOC_DAEMON_PORT | 5830 | Host port used by Docker Compose. |
PINDOC_PROJECT | pindoc | Default project for unscoped reads/config. |
PINDOC_PUBLIC_BASE_URL | http://127.0.0.1:${PINDOC_DAEMON_PORT} | Public base URL used in generated links and OAuth metadata. |
PINDOC_BIND_ADDR | 127.0.0.1:5830 | Security intent. Non-loopback values require an IdP or explicit public unauthenticated opt-in. |
PINDOC_AUTH_PROVIDERS | empty | Identity providers enabled for external requests. Current provider: github. |
PINDOC_ALLOW_PUBLIC_UNAUTHENTICATED | false | Explicit opt-in for external exposure without an IdP. Use only behind a trusted network/reverse proxy. |
PINDOC_FORCE_OAUTH_LOCAL | false | Development flag that routes loopback /mcp calls through OAuth bearer auth for local QA. |
PINDOC_ALLOWED_ORIGINS | empty | Comma-separated CORS allowlist. Empty means same-origin only; set explicit origins for cross-origin frontends. |
PINDOC_DEV_MODE | false | Development-only flag that permits wildcard CORS for local tooling. Do not enable on public instances. |
Do not expose a writable daemon to the public internet without an identity provider. For a public read-only demo, keep /mcp and mutating HTTP routes blocked at the reverse proxy; see SECURITY.md and docs/22-public-demo.md. The daemon also sets baseline security headers itself, including nosniff, clickjacking protection, referrer policy, and hardened asset-blob CSP.
For a writable public or cross-device instance, follow docs/oauth-setup.md. It covers GitHub OAuth App setup, the ${PINDOC_PUBLIC_BASE_URL}/auth/github/callback callback rule, runtime MCP client registration, and local OAuth QA with PINDOC_FORCE_OAUTH_LOCAL.
# Run Go tests. Integration tests that need Postgres are skipped unless
go test ./...
cd web pnpm install --frozen-lockfile pnpm typecheck pnpm test:unit pnpm build
docker build -t pindoc-server:local .
To test the OAuth bearer path locally while still connecting through 127.0.0.1, set PINDOC_FORCE_OAUTH_LOCAL=true; the daemon will warn on boot and require Bearer tokens for loopback /mcp calls.
On Windows hosts without a local C toolchain, run Go tests through Docker:
docker run --rm -v "${PWD}:/work" -w /work golang:1.25 go test ./...
Run database integration tests against a disposable Postgres/pgvector database; never point PINDOC_TEST_DATABASE_URL at a personal or production Pindoc database. Test and plugin fixtures must opt into Reader isolation explicitly: set projects.CreateProjectInput.ReaderHidden to true, or set projects.reader_hidden = TRUE when inserting with SQL. Slug-prefix detection is deprecated and no longer runs at request time. Migration 0070 only performs a one-time backfill for fixture prefixes used by older Pindoc releases.
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요