SynCore
用于AI原生开发的MCP服务器 -2周内独立构建,人工智能援助预算为15美元。
内存、向量、代码分析和知识图的统一接口。 65+工具 可通过单个MCP连接访问。
内置Rust。使用Claude Code进行生产测试。
这实际上是做什么的
SynCore是一个MCP(模型上下文协议)服务器 65工具 用于:
- 持久存储器 -键值存储(SQLite+Sled缓存)
- 双域矢量搜索 -代码和文本的单独嵌入模型
- 编码域:BGE-small-en-v1.5(针对语义代码搜索进行了优化) - 通用域:全MiniLM-L6-v2(针对文档/任务进行了优化)
- 代码智能 -Rust、JavaScript、Python、JSON、TOML、Bash的树型解析
- 知识图谱 -Neo4j与Cypher查询的集成
- 任务管理 -使用父/子关系进行任务跟踪
- 代理商协调 -多代理工作流的消息总线
- 应用程序映射 -文件依赖关系跟踪和更改历史记录
- 顺序推理 -多步思维记录
- 项目分析 -LLM免费代码库智能(热点、死代码、周期、重构)
现状(2025年11月)
什么是可靠的
核心工具(每日测试):
memory_store/memory_query-键值存储,约1ms延迟vector_insert/vector_search-语义搜索,10-50ms延迟code_index/code_search-代码语义搜索code_index_directory-批次索引 增量支持 (跳过未更改的文件)parser_analyze-树型AST提取,可选持久性parser_search-Ripgrep代码模式搜索graph_query/graph_insert-Neo4j密码查询code_graph_sync_neo4j-将SQLite实体同步到Neo4jcode_graph_fusion_query-三模式(简单/注意力/推理)搜索
图形特征:
- 7种边缘类型:包含、调用、使用、导入、模块_儿童、继承、引用
- PageRank的多跳传播
- 时间元数据丰富(git历史+mtime)
项目分析引擎(第6阶段):
project_file_report-详细的文件分析(实体、关系、指标)project_hotspots-查找复杂性热点(扇入/扇出、LOC、实体计数)project_dead_code-检测未使用的实体project_cycles-查找循环依赖关系project_unused_imports-查找未使用的导入project_module_map-模块依赖关系图project_refactor_suggestions-启发式重构建议
元工具(聚合PAE数据):
project_architecture_overview-项目范围摘要:实体计数、依赖关系统计、复杂性指标project_complexity_dashboard-热门热点、最差周期、复杂性排名project_improvement_roadmap-通过努力/影响矩阵优先改进project_refactor_action_plan-可操作的重构计划(高风险热点、死代码、周期中断)
增量索引(新增-第5阶段):
- SHA256+时间变化检测
- 跳过未更改的文件(返回0个实体=跳过)
- 检测新的、修改的、删除的文件
- Idempotent(可安全重复运行)
什么是实验
- IntelliTask AI功能 -要求Ollama在本地运行,质量取决于型号
- 顺序推理 -
sequential_cycle需要Ollama - 代理消息总线 -工作,但未在生产中进行大量测试
- RAGGraph多跳 -有效,但评分可能需要调整
诚实的限制
- 仅限单个节点 -无分布式模式
- 无身份验证 -专为当地使用而设计
- 图形功能需要Neo4j -没有它,有些工具会悄无声息地失败
- 人工智能功能需要Ollama -IntelliTask,sequential_cycle需要它
- 启动后约500MB RAM -加载了两个HuggingFace嵌入模型(BGE+MiniLM)
- 图形功能已部分测试 -Neo4j同步有效,但实体填充需要验证
快速开始
构建
cd syncore
cargo build --release生成两个二进制文件:
target/release/syncore_mcp_stdio(~55 MB)-克劳德代码的MCP服务器target/release/syncore_graph_cli(约33 MB)-用于图形操作的CLI
配置Claude代码
增添 ~/.config/claude/mcp_settings.json:
{
"syncore": {
"command": "/path/to/syncore/target/release/syncore_mcp_stdio",
"args": [],
"env": {
"DB_PATH": "/path/to/syncore.db",
"NEO4J_URI": "bolt://127.0.0.1:7687",
"NEO4J_USER": "neo4j",
"NEO4J_PASS": "your_password"
}
}
}环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
DB_PATH | syncore.db | SQLite数据库路径 |
HTTP_PORT | 3001 | HTTP流服务器端口 |
NEO4J_URI | bolt://127.0.0.1:7687 | Neo4j连接 |
NEO4J_USER | neo4j | Neo4j用户名 |
NEO4J_PASS | (图形需要) | Neo4j密码 |
RUST_LOG | info | 日志级别 |
所有工具(42个记忆套件+23个独立工具)
内存套件(通过42个命令 memory_suite)
基本内存(5个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
store | 将键值对与元数据一起存储 | 低 |
query | 按键检索值 | 低 |
delete | 删除内存条目 | 低 |
list_keys | 列出所有记忆键 | 低 |
memory_stats | 获取计数和命名空间统计信息 | 低 |
语义搜索(8个命令-APEX 1.9-M):
| 命令 | 描述 | 成本 |
|---|---|---|
search_semantic | 基于向量的语义搜索 | 中等 |
search_hybrid | 组合语义+关键字搜索 | 中等 |
query_by_tags | 按标签筛选记忆 | 低 |
query_by_importance | 按重要性阈值筛选 | 低 |
query_recent | 获取N个最近的记忆 | 低 |
query_since | 获取自时间戳以来的记忆 | 低 |
consolidate_similar | 查找并合并相似的记忆 | 高 |
get_related_memories | 获取相关记忆(语义+图形) | 中等 |
矢量操作(2个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
vector_insert | 添加带有嵌入的文本 | 中等 |
vector_search | 语义相似性搜索 | 中等 |
任务管理(15个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
task_create | 创建任务 | 低 |
intellitask_list | 列出所有任务 | 低 |
intellitask_get | 按ID获取任务 | 低 |
intellitask_update_status | 更新任务状态 | 低 |
intellitask_next_ready | 准备下一个任务 | 低 |
intellitask_get_subtasks | 获取子任务 | 低 |
intellitask_subtask_stats | 子任务统计 | 低 |
intellitask_task_statistics | 总体任务统计 | 低 |
intellitask_prd_statistics | PRD特定统计数据 | 低 |
intellitask_save | 将任务分解保存到数据库 | 低 |
intellitask_generate | 需要Ollama -PRD的AI任务分解 | 高 |
intellitask_subtasks | 需要Ollama -生成子任务 | 高 |
intellitask_prioritize | 需要Ollama -AI任务优先级 | 高 |
intellitask_next | 需要Ollama -AI下一个任务建议 | 高 |
顺序推理(4个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
sequential_record | 记录推理链中的思维步骤 | 低 |
sequential_get | 获取任务的思考步骤 | 低 |
sequential_search | 从语义上搜索思维步骤 | 中等 |
sequential_cycle | 需要Ollama -运行推理周期 | 非常高 |
代理协调(8个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
agent_send | 通过消息总线向代理发送消息 | 低 |
agent_recv | 接收待处理邮件 | 低 |
agent_poll | 等待下一条消息(阻塞) | 低 |
agent_register | 注册具有功能的代理 | 低 |
agent_list | 列出注册代理 | 低 |
agent_status | 更新代理状态 | 低 |
agent_task | 发送结构化任务信封 | 低 |
agent_result | 提交已完成的任务结果 | 低 |
独立MCP工具
代码套件(11个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
index | 索引源文件 | 高 |
search | 语义代码搜索 | 中等 |
index_directory | 批量索引目录(增量) | 非常高 |
parse | 树型AST提取 | 中等 |
grep | Ripgrep模式搜索 | 中等 |
explain | 用指标解释功能 | 中等 |
doc_index | 从目录索引文档 | 非常高 |
doc_search | 语义文档搜索 | 中等 |
fusion_query | 三模式RAG查询(简单/注意力/推理) | 高 |
enrich_temporal | 添加git历史记录+mtime元数据 | 非常高 |
sync_neo4j | 将SQLite实体同步到Neo4j | 非常高 |
图形套件(5个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
query | 执行Cypher读取查询 | 高 |
insert | 执行Cypher写入查询 | 高 |
relate | 在节点之间创建关系 | 高 |
rag_query | 基于多跳图推理的RAG查询 | 高 |
rag_multihop | 种子节点的多跳图扩散 | 高 |
映射套件(8个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
record | 带有导入/导出/删除的记录文件节点 | 低 |
get | 获取文件节点 | 低 |
search | 语义文件搜索 | 中等 |
deps | 获取传递依赖关系 | 中等 |
app_record | 记录代码更改 | 低 |
app_get | 获取任务更改 | 低 |
app_history | 获取文件更改历史记录 | 低 |
app_search | 搜索语义变化 | 中等 |
调试套件(10个命令):
| 命令 | 描述 | 成本 |
|---|---|---|
logs_tail | 获取最近的日志条目 | 低 |
tool_metadata_list | 列出工具元数据 | 低 |
project_file_report | 详细文件分析 | 中等 |
project_hotspots | 查找复杂性热点 | 中等 |
project_dead_code | 识别未使用的实体 | 中等 |
project_cycles | 检测循环依赖关系 | 中等 |
project_unused_imports | 查找未使用的导入 | 中等 |
project_module_map | 模块依赖关系图 | 中等 |
project_refactor_suggestions | 重构建议 | 中等 |
project_code_smells | 检测代码气味 | 中等 |
REFRAG套件(3个命令-APEX 1.8):
| 命令 | 描述 | 成本 |
|---|---|---|
query | 代币预算的选择性扩张 | 高 |
configure | 更新扩展策略 | 低 |
help | 显示REFRAG使用情况 | 低 |
架构说明
双域嵌入
SynCore使用两个单独的矢量存储和专门的模型:
码域 (syncore_code.index):
- 型号:BGE-small-en-v1.5(384调光)
- 目的:语义代码搜索
- 为什么:接受过代码+文本培训,了解编程语义
- 路由:代码实体、函数、类
一般域 (syncore_general.index):
- 型号:全迷你LM-L6-v2(384昏暗)
- 目的:文件、任务、笔记
- 为什么:针对自然语言理解进行了优化
- 路由:记忆、文档、推理步骤
这可以防止“域污染”,即代码嵌入污染文档搜索,反之亦然。
图形BERT集成点
代码库包括 GraphEmbeddingStrategy 未来集成Graph BERT或其他GNN模型以将CODE嵌入与图结构特征相结合的特点。目前使用确定性特征注入。
演出
在Ryzen 7 32GB RAM上测试:
| 操作 | 延迟 |
|---|---|
| 内存存储/查询 | \<1ms |
| 矢量搜索(编码域) | 10-50ms |
| 矢量搜索(通用域) | 10-50ms |
| 码图融合 | 10-50ms |
| Neo4j查询 | 1-10ms |
| 增量索引(未更改的文件) | \<1ms |
注意:HNSW索引在预热后将搜索时间缩短到1-10ms,但初始查询使用线性扫描。
需求
必修的:
- 锈蚀1.70+
- ~4GB磁盘用于构建工件
- 嵌入模型加载后约500MB RAM
可选:
- Neo4j 5.x(用于图形功能-
graph_*,code_graph_*,raggraph_*) - Ollama(用于AI功能-
intellitask_generate/subtasks/prioritize/next,sequential_cycle)
CLI工具
syncore_graph_cli 提供命令行图形操作:
# Sync SQLite entities to Neo4j
NEO4J_URI="bolt://127.0.0.1:7687" NEO4J_USER="neo4j" NEO4J_PASS="password" \
./target/release/syncore_graph_cli sync
# Validate graph integrity
./target/release/syncore_graph_cli validate
# Show graph statistics
./target/release/syncore_graph_cli stats许可证
GPL-3.0
技术亮点(工程师接地)
是什么让这很有趣:
- 双域嵌入 -具有自动路由功能的单独BGE/MiniLM型号(在MCP服务器中很少见)
- 多模式存储 -SQLite+Sled+Neo4j+HNSW在单个一致的API中
- 增量索引 -SHA256+时间变化检测,幂等重复运行
- 代码图融合 -具有时间评分的三模式搜索(简单/注意力/推理)
- 图表BERT接缝 -通过特征抽象实现GNN集成的可扩展点
- 零依赖项目分析 -没有LLM调用的复杂性度量
什么还没有准备好生产:
- Neo4j实体查询返回空(同步工作,但填充逻辑需要调试)
- 图BERT是架构占位符(使用确定性特征注入)
- 大型结果集无流式传输
- 集成测试覆盖范围有限
- 单节点架构(无复制/分片)
发展背景:
- 2周,单人开发,15美元预算
- 100%人工智能辅助代码生成(克劳德代码+免费层模型)
- 250个文件中7866行Rust
- 使用Claude Code CLI进行日常生产使用
致谢
使用rmcp、neo4rs、rusqlite、树保姆、fastembed、tokio、雪橇、hnsw_rs构建。
核心嵌入模型:BGE-small-en-v1.5(BAAI),全MiniLM-L6-v2(句子转换器)。
