Token导航 LogoToken导航TokenDH.com
S N A P logo
开发工具未说明官方级别未说明来源级核验

S N A P

MCP Server

SNAP是一个通过模型上下文协议(MCP)暴露快照类型的代码分析管道,将代码、文档、数据和配置文件解析为结构化数据库快照,用于针对性AI检索。

工具数

15

提示词数

0

GitHub Stars

1

资源数

0
代码分析PythonClaudeClaude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

MnkyBr8n

提供方

MnkyBr8n

最后核验

2026/5/17 20:23

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

SNAP-MCP服务器

S午睡 N笔记本 A.停留 P存在

代码分析管道通过模型上下文协议(MCP)公开快照类型。将代码、文档、数据和配置文件解析为结构化的数据库快照,以便进行有针对性的人工智能检索。

______________________________________________________________________

目录

______________________________________________________________________

快速开始

SNAP是作为一个自包含的二进制文件分发的,不需要安装Python。

______________________________________________________________________

二进制安装

1.下载二进制文件

从以下网址下载适用于您平台的二进制文件 最新版本:

平台二进制
窗户(x86-64)snap-mcp.exe
Linux(x86-64)snap-mcp
macOS(arm64)snap-mcp

将二进制文件放在您选择的目录中,例如。 C:\Users\\snap\.

在Linux/macOS上,使其可执行:

chmod +x snap-mcp

所有解析器(Nim、tree sitter、semgrep)都是捆绑的,不需要额外安装。

2.创建数据目录结构

mkdir -p data/logs data/staging data/repos data/projects

3.配置环境

创建一个 .env 文件与二进制文件位于同一目录中:

# SQLite is the default — no additional setup required
SNAP_DB_MODE=sqlite
SNAP_SQLITE_PATH=data/snap.db

# Optional: PostgreSQL
# SNAP_DB_MODE=postgres
# SNAP_POSTGRES_DSN=postgresql://user:pass@localhost:5432/snap

# Logging
SNAP_LOG_LEVEL=INFO
SNAP_LOG_JSON=true

4.验证

# Windows
snap-mcp.exe --help

# Linux / macOS
./snap-mcp --help

______________________________________________________________________

企业/源访问

企业许可和源访问查询: cll.automata@outlook.com

______________________________________________________________________

代理和客户端设置

agent_setups.md 有关Claude Code、Claude Desktop、GitHub Copilot Chat、HTTP+SSE和Azure云部署的设置指南。

______________________________________________________________________

LLM权限模型

LLM在运行时具有严格限制的权利 app/mcp/tools.py --不是按照惯例或文件字符串。

允许--无需批准

DB快照只读。LLM从不读取原始文件。

工具注释
get_project_manifest从数据库读取处理统计数据
query_snapshots按类型或文件路径查询数据库
get_system_metrics读取系统范围内的汇总指标
list_projects列出数据库中的所有项目
list_runs项目的列表处理运行

每次通话都需要明确的用户批准

工具注释
get_project_notebook从数据库中读取已组装的项目快照
clone_to_repos将GitHub repo克隆到repos/--在后台自动执行,LLM不读取文件
copy_to_staging将本地目录复制到staging/--自动在后台执行,LLM不读取文件
upload_to_staging将文件内容上传到暂存
get_staging_info仅文件名、大小、时间戳——无文件内容
clear_staging删除项目的暂存文件
kill_task取消卡住的异步工具调用

不允许——立即加薪

工具原因
delete_project没有删除权限
promote_run无写入权限
process_local_project没有摄取权限

不允许的操作

LLM从不:读取原始文件、读取GitHub原始内容、摄取文件、排序/过滤文件或处理文件。SNAP完成了这一切。

______________________________________________________________________

代理工作流

SNAP是摄取引擎。LLM阶段内容——SNAP摄取它。

GitHub 仓库

LLM: clone_to_repos(repo_url, vendor_id)
    └─► Clones into repos/{project_id}/. project_id = repo name, derived by SNAP.
SNAP: auto-ingests in background thread → stores in DB → clears repos/
LLM (on request): query_snapshots / get_project_notebook

本地项目

LLM: copy_to_staging(project_id, source_path)
    └─► Copies files to staging/{project_id}/. Returns immediately.
SNAP: auto-ingests in background thread → stores in DB → clears staging/
LLM (on request): query_snapshots / get_project_notebook

规则:

  • LLM stages ONE操作:克隆触发器(GitHub)或暂存副本(本地)
  • LLM从不摄取、过滤、读取或处理文件
  • 所有过滤和摄取都发生在SNAP内部
  • LLM仅从数据库中读取结构化快照数据

______________________________________________________________________

二进制文件头

SNAP使用二进制文件头将文件与项目相关联,而不需要目录结构。

报头格式

FileHeader (variable size):
  magic:            "SNAPFILE" (8 bytes)
  version:          uint16 (2 bytes)
  project_id_len:   uint16 (2 bytes)
  project_id:       utf-8 string (variable)
  snapshot_count:   uint32 (4 bytes)
  [file content follows]

用法

from app.extraction.binary_packer import write_file_header, read_project_id_from_file

# Write file with project association
content = b"# Project Notes\n\nImplementation details..."
write_file_header("notes.md", "SNAP", content)

# Read project_id from file
project_id = read_project_id_from_file("notes.md")  # Returns "SNAP"

自动摄取工作流程

1. File with binary header uploaded via upload_to_staging
2. SNAP reads header → extracts project_id
3. File placed in staging/{project_id}/
4. Auto-ingested into {project_id} project in background
5. Staging cleared

使用案例:

  • 聊天对话日志(project_id=工作项目名称)
  • 项目说明和文件
  • RAG查询的上下文文件
  • 具有明确所有权的跨项目文件共享

______________________________________________________________________

Nim解析器

高性能本机解析器捆绑在snap-mcp二进制文件中。处理所有文档、数据和配置格式。

支持格式

捕捉类型格式输出字段
text (DocGraph).md, .html, .htm, .docx, .pdf, .txt, .rtfdoc.*
csv.csv, .tsv, .xml (数据)csv.*
config.json, .jsonl, .xml (config), .yaml, .yml, .tomlconfig.*

XML在解析时自动分类:类文档标签→ text,重复记录行→ csv,其他一切→ config.

演出

操作之前Nim加速
解析1MB标记~450ms~8ms56x
提取CSV模式~180ms~3ms60x
解析配置JSON~120ms~4ms30x

注: Tree sitter和semgrep仍保留在Python中(外部工具,已经优化)。

______________________________________________________________________

管理员CLI

完全绕过MCP的人工操作。安装方法 pip install -e . 然后使用 snap-admin.

# List all ingested projects with snapshot and run counts
snap-admin list-projects

# Show all runs for a project (active / superseded / failed)
snap-admin runs 

# Health check and active-run summary for a project
snap-admin manifest 

# Browse snapshots — summary by type, or drill in by type or file
snap-admin snapshots 

snap-admin snapshots 
 --type 
snap-admin snapshots 
 --file 

# Delete a project and all its data (DB, repos, staging)
snap-admin delete-project 

# Copy a local directory into staging for a project
snap-admin upload-to-staging 
 

# Clone a GitHub repo directly (no LLM involved) — repos_watcher ingests
snap-admin clone-github 

也可调用为 python -m app.admin .

______________________________________________________________________

可用的MCP工具

工具权限描述
get_project_notebook允许从数据库读取完整的项目快照
get_project_manifest允许从数据库读取处理统计数据
query_snapshots允许按快照类型或文件路径查询
get_system_metrics允许系统范围内的聚合指标
list_projects允许列出所有具有快照计数的项目
list_runs允许对项目运行列表处理
clone_to_repos需要批准克隆GitHub仓库→ 在后台自动摄取
copy_to_staging需要批准将本地目录复制到暂存中
upload_to_staging需要批准将文件内容上传到暂存
get_staging_info需要批准列出暂存文件名、大小、时间戳
clear_staging需要批准清除项目的所有暂存文件
kill_task需要批准取消卡住的异步工具调用
delete_project已屏蔽LLM没有删除权限--使用 snap-admin
promote_run已屏蔽LLM没有写权
process_local_project已屏蔽LLM没有摄取权限

______________________________________________________________________

快照类型

代码分析(7种类型)

类型分析器描述
file_metadatatree_sitter路径、语言、LOC、包信息
importstree_sitter外部和内部模块依赖关系
exportstree_sitter函数、类、常量、类型
functionstree_sitter名称、签名、异步状态、装饰器
functions_coretree_sitter完整的函数体、文档字符串、返回类型、参数
classestree_sitter名称、继承、方法、属性
connectionstree_sitter依赖关系、函数调用、实例化

安全与质量(2种类型)

类型分析器描述
securitysemgrep漏洞、秘密、SQL注入、XSS
qualitysemgrep反模式、代码异味、TODO、弃用用法

文件(3种类型)

类型分析器描述
doc_metadatanim_parser标题、作者、日期、版本、语言
doc_contentnim_passer节、URL、代码片段
doc_analysisnim_passer需求、实体、引用、相关文件

支持: .md, .html, .docx, .pdf, .txt, .rtf --以及 .xml 当被归类为文档时。

CSV/数据(2种类型)

类型分析器描述
csv_schemanim_parser列名、推断类型、列计数
csv_datanim_parser行计数、空计数、唯一计数、前5行

支持: .csv, .tsv, .xml (当分类为行数据时)。

配置(1种类型)

类型分析器描述
config_metadatanim_parser顶级密钥、嵌套路径、env变量、DB字符串、API端点/主机

支持: .json, .jsonl, .yaml, .yml, .toml, .xml (当分类为配置时)。

______________________________________________________________________

存储体系结构

SNAP使用具有二进制快照格式的混合存储模型,以实现高效的Nim集成。

数据库模式

模式存储用例
sqliteSQLite(默认)单用户、嵌入式、零配置
postgresPostgreSQL多用户、网络、生产
dual两者皆有开发、迁移、冗余

通过设置 .env:

SNAP_DB_MODE=sqlite        # Default
SNAP_DB_MODE=postgres      # Requires SNAP_POSTGRES_DSN
SNAP_DB_MODE=dual          # Both databases

二进制快照格式

快照以二进制打包数据的形式存储,以提高性能和Nim兼容性。

快照结构:

SnapshotHeader (561 bytes):
  magic:         "SNAP" (4 bytes)
  version:       uint16 (2 bytes)
  snapshot_type: uint8 (1 byte)
  field_count:   uint16 (2 bytes)
  content_hash:  SHA-256 (32 bytes)
  simhash:       uint64 (8 bytes)
  minhash:       128 × uint32 (512 bytes)

FieldDescriptor (11 bytes each):
  field_id:      uint16 (2 bytes)
  data_type:     uint8 (1 byte)  # 0=string, 1=int, 2=binary, 3=array
  offset:        uint32 (4 bytes)
  length:        uint32 (4 bytes)

Data Block (variable):
  Packed field data referenced by descriptors

储存:

CREATE TABLE snapshot_notebooks (
    snapshot_id   TEXT PRIMARY KEY,
    run_id        TEXT NOT NULL,
    project_id    TEXT NOT NULL,
    snapshot_type TEXT NOT NULL,
    source_file   TEXT NOT NULL,
    binary_data   BYTEA NOT NULL,           -- Binary-packed snapshot
    source_hash   TEXT,
    content_hash  TEXT,                      -- SHA-256 hex
    simhash       BIGINT,                    -- 64-bit similarity hash
    minhash       TEXT,                      -- 128 × 32-bit MinHash (CSV)
    created_at    TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

基于哈希的版本控制

哈希类型大小用途
source_hashSHA-256文件内容哈希(重复数据消除)
content_hashSHA-256提取的内容哈希(变化检测)
simhash64位相似指纹(接近重复检测)
minhash128×32位设置相似度(文档比较)

版本控制逻辑:

New file ingested:
  1. Calculate source_hash
  2. Query DB for existing snapshot with same source_file + source_hash
  3. If exists → skip (deduplication)
  4. If not exists → create new snapshot (versioning)
  5. Multiple versions coexist in DB (query by run_id or latest)

______________________________________________________________________

配置

环境变量使用 SNAP_ 前缀。

数据库

变量默认值描述
SNAP_DB_MODEsqlite数据库模式: sqlite, postgres,或 dual
SNAP_POSTGRES_DSN*(postgres/dual需要)*PostgreSQL连接字符串
SNAP_SQLITE_PATHdata/snap.dbSQLite数据库路径

目录

变量默认值描述
SNAP_DATA_DIRdata/基础数据目录
SNAP_STAGING_DIRdata/staging/文件暂存(自动摄取)
SNAP_REPOS_DIRdata/repos/GitHub克隆(摄取后清除)

系统

变量默认值描述
SNAP_LOG_LEVELINFO日志记录级别
SNAP_LOG_JSONtrueJSON格式的日志
SNAP_GIT_CLONE_DEPTH1浅克隆深度
SNAP_GIT_CLONE_TIMEOUT_SECONDS600Git克隆超时(秒)

分析器限制

变量默认值描述
SNAP_PARSER_LIMITS_SOFT_CAP_LOC1500代码警告阈值(LOC)
SNAP_PARSER_LIMITS_HARD_CAP_LOC5000代码拒绝阈值(LOC)
SNAP_PARSER_LIMITS_SOFT_CAP_BYTES500000文本警告阈值(字节)
SNAP_PARSER_LIMITS_HARD_CAP_BYTES10000000文本拒绝阈值(字节)

身份验证(仅限HTTP+SSE,默认禁用)

变量默认值描述
SNAP_AUTH_ENABLEDfalse启用JWT/OAuth身份验证
SNAP_AUTH_JWT_SECRET*(空)*JWT签约秘诀
SNAP_AUTH_GITHUB_CLIENT_ID*(空)*GitHub OAuth应用程序客户端ID
SNAP_AUTH_GITHUB_CLIENT_SECRET*(空)*GitHub OAuth应用程序客户端密钥
Stdio模式(Claude Code)从不受身份验证设置的影响。

______________________________________________________________________

日志记录

SNAP同时将结构化JSON日志写入三个目标。

日志文件

文件级别旋转注释
data/logs/app.log警告+普通文件处理程序——VSCode安全,始终可读
data/logs/app_debug.log信息+5 MB×3旋转文件处理程序——完整调试跟踪
stderr所有级别--MCP兼容;stdio传输所需

日志格式

受控于 SNAP_LOG_JSON (默认值 true).每一行都是一个JSON对象:

{"ts": "2026-02-15 12:00:00,000", "level": "INFO", "name": "snap", "msg": "Snapshot created", "snapshot_id": "...", "project_id": "...", "snapshot_type": "functions", "parser": "tree_sitter", "fields_count": 12}

SNAP_LOG_JSON=false 对于人类可读的输出:

2026-02-15 12:00:00,000 INFO snap Snapshot created

结构化日志事件

事件级别关键字段
文件已解析调试path, tag, size, language, parse_duration_ms, snapshots_created, parsers
已创建快照信息snapshot_id, snapshot_type, parser, fields_count
文件分类信息/警告/错误path, size, tag, reason
回购处理完成信息files_processed, snapshots_created, snapshot_types_summary, parsers_summary, total_duration_ms

文件标签

标签级别含义
normal信息软帽内——正常处理
large警告超过 SOFT_CAP_LOC / SOFT_CAP_BYTES --已处理警告
potential_god警告疑似上帝文件——已处理警告
rejected错误超出 HARD_CAP_LOC / HARD_CAP_BYTES --跳过

______________________________________________________________________

建筑

管道流量

GitHub:
clone_to_repos(repo_url)
    ↓ clone completes synchronously
repos/{project_id}/
    ↓ auto-ingest background thread
ingest_cloned_repo()    ← security filtering, file enumeration
    ↓
file_router → parsers → field_mapper → snapshot_builder → DB
    ↓
repos/ cleared

Local:
copy_to_staging(source_path)
    ↓ stage_directory() filters and copies
staging/{project_id}/
    ↓ auto-ingest background thread
process_project()       ← security filtering, file enumeration
    ↓
file_router → parsers → field_mapper → snapshot_builder → DB
    ↓
staging/ cleared

文件结构

SNAP/
├── app/
│   ├── admin.py                         # Admin CLI (human-only: delete, upload, clone, list)
│   ├── main.py                          # Orchestration pipeline
│   ├── config/
│   │   └── settings.py
│   ├── extraction/
│   │   ├── binary_packer.py             # Binary snapshot packer/unpacker (Nim-compatible)
│   │   ├── field_mapper.py              # Maps parser output to snapshot types
│   │   └── snapshot_builder.py
│   ├── ingest/
│   │   ├── file_router.py               # Routes files to parsers by extension
│   │   ├── github_cloner.py             # Shallow clone → repos/
│   │   └── local_loader.py              # stage_directory() + staging helpers
│   │
│   ├── logging/
│   │   └── logger.py
│   ├── mcp/
│   │   ├── auth.py                      # JWT + GitHub OAuth
│   │   ├── run.py                       # Entry point: stdio or HTTP+SSE
│   │   ├── security.py                  # Input validation, path traversal prevention
│   │   ├── server.py                    # MCP server, tool registry, Starlette app
│   │   └── tools.py                     # Tool handlers + permission enforcement
│   ├── parsers/
│   │   ├── nim_parser.nim               # Native parser: doc, csv, config formats (compile to binary)
│   │   ├── nim_parser.py                # Python wrapper for Nim parser
│   │   ├── pre_converter.nim            # Pre-processing helper for Nim parser
│   │   ├── semgrep_parser.py
│   │   └── tree_sitter_parser.py
│   ├── schemas/
│   │   ├── master_notebook.yaml
│   │   └── snapshot_templates/          # JSON templates (defined and gated by master_notebook.yaml)
│   ├── security/
│   │   └── network_policy.py
│   └── storage/
│       ├── db.py
│       └── snapshot_repo.py             # CRUD, upsert, run versioning
├── data/
│   ├── logs/
│   ├── projects/                        # Project manifests
│   ├── repos/                           # GitHub clones (cleared after ingest)
│   └── staging/                         # Local file staging (cleared after ingest)
├── docker/
│   └── Dockerfile
├── docker-compose.yml
├── pyproject.toml
├── run_mcp.bat
└── run_mcp.sh

______________________________________________________________________

安全

LLM自治限制

  • 未读取原始文件 --LLM仅读取结构化数据库快照
  • 无摄入 --SNAP摄取并解析;LLM从不接触文件
  • 无删除/写入权限delete_project, promote_run 立即提高
  • project_id已锁定 --从克隆时的回购URL派生;LLM无法提供或重命名
  • vendor_id受限 --字母数字+ _@.- 仅限,最多64个字符;阻止注入字符
  • 运行时实施ALLOWED_TOOLS / NOT_ALLOWED_TOOLS 在处理程序入口处检查冷冻集

输入验证

  • 项目ID: ^[a-zA-Z0-9_-]{3,64}$
  • 供应商ID: ^[a-zA-Z0-9_@.\-]{1,64}$
  • 文件名:无路径遍历(.., \x00, ~),没有反斜杠,保留名称被阻止
  • 回购URL:仅HTTPS GitHub URL
  • 符号链接:在暂存时被拒绝

分级过滤器(stage_directory)

SNAP在复制时强制执行的所有筛选——LLM没有角色。

精简目录 (从未穿过): node_modules · .git · .svn · .hg · __pycache__ · .venv · venv · .next · .nuxt · .expo · .gradle · build · dist · target · Pods · .terraform · vendor

忽略的文件模式:

类别图案
秘密/凭证*.pem, *.key, *.p12, .env, .env.*, *.token, serviceAccountKey.json
云配置.aws/, .azure/, .gcloud/
构建工件*.min.js, *.min.css, *.pyc, *.class, *.so, *.dll, *.exe
覆盖范围/日志coverage/, *.log, *.lock

架构治理

app/schemas/master_notebook.yaml 是所有快照类型和字段定义的唯一真实来源。

  • 模板验证SnapshotBuilder 在启动时根据主笔记本验证每个模板文件。模板未在中注册 snapshot_templates 被拒绝,永远不会逃跑。
  • 字段验证 --模板中未注册的任何字段 field_id_registry 导致整个模板被拒绝。
  • MCP查询验证validate_snapshot_type 在运行时直接从主笔记本读取有效类型。没有硬编码列表。

解析时间注入保护

  • 快速注射 --30多种模式被阻止:指令覆盖、角色劫持、越狱触发、渗透探测
  • 秘密编辑 -AWS密钥、GitHub令牌、JWT、API密钥在所有字段值中自动重编辑
  • AST水平过滤 --扫描树型节点以寻找命令式模式;标记为 [FILTERED:IMPERATIVE]
  • 内容安全 --高熵检测、base64块、插入数据库前标记的十六进制编码数据

______________________________________________________________________

需求

二进制版本没有安装时依赖关系。所有解析器和库都是捆绑在一起的。

要求注意事项
操作系统Windows x86-64、Linux x86-64和macOS
SQLite3捆绑--零配置
PostgreSQL14+--可选,仅当 SNAP_DB_MODE=postgres

捆绑在二进制文件中: 树保姆(所有语言)·semgrep·nim_passer·所有Python依赖项。

______________________________________________________________________

故障排除

MCP服务器无法连接

  1. 日志必须转到stderr (不是stdout):
   handler = logging.StreamHandler(sys.stderr)
  1. 使用包装脚本 --Claude Code不尊重cwd:
   @echo off
   cd /d C:\Users\\snap
   snap-mcp.exe %*
  1. 验证连接:
   claude mcp list
   # snap: ... - ✓ Connected

缺少postgres_dsn

SNAP_POSTGRES_DSN=postgresql://user:pass@localhost:5432/snap

Semgrep未运行

SNAP在启动时自动安装和升级semgrep。如果自动安装失败:

.venv\Scripts\python.exe -m pip install --upgrade semgrep

______________________________________________________________________

©CLL自动机

目录标签

目录标签

代码分析PythonClaude本地部署AI检索结构化数据处理文档解析安全过滤

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

15

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP