自托管MCP堆栈
对于恢复工作的AI代理: 从上到下阅读此文件。STATE部分告诉磁盘上存在什么。下一部分告诉你该做什么。下面的参考部分有你需要的详细信息。
这是什么
一个自托管的开发环境,用您控制的本地工具和OSS取代云MCP服务器。没有供应商锁定,没有费率限制,不依赖于其他人的正常运行时间。
Cloud MCP Server → Extract tool definitions → Generate SKILL.md
("phone book") (points to self-hosted tools)
基础路径: /Users/lucassaintlaurent/Desktop/Workspace/GitHubVault/OfflineMPCs/
GitHub账号: CYPKNFT(克隆前在此分叉的所有存储库)
原计划: JARVIS/Plans/Context7Offline.md
国家——现在存在什么
完成
| 什么 |
状态 |
证明 |
| 目录结构 |
已完成 |
find OfflineMPCs/ -type d -maxdepth 1 |
| 11 MCP电话簿存储库克隆 |
完成 |
ls mcp-phonebooks/ → 11 dirs |
| 已提取273个工具定义 |
已完成 |
manifests/phonebook-index.json (673行,有效JSON) |
| 克隆了50个文档仓库 |
完成 |
manifests/clone-manifest.json (50个条目,约5.4 GB) |
| 已生成克隆清单 |
已完成 |
manifests/clone-manifest.json |
| 11个SKILL.md文件(所有技能) |
完成 |
ls skills/*/SKILL.md → 11 文件(共151个操作) |
| 测试套件(3个级别) |
已完成 |
tests/test-structure.sh, test-dependencies.sh, test-functional.sh |
| 结构测试通过 |
完成 |
11/11技能通过 |
| 技能登记 |
完成 |
manifests/skill-registry.json (11个就绪,0个待定) |
技能状态(全部11项完成)
| 技能 |
操作 |
离线 |
状态 |
docs-lookup |
4 |
是 |
READY--替换Context7 |
file-ops |
14 |
是 |
准备好了 |
git-ops |
12 |
是 |
准备好了 |
memory |
9 |
是 |
准备好了 |
container-ops |
14 |
是 |
准备好了 |
doc-conversion |
10 |
是 |
准备好了 |
browser |
26 |
否(实时MCP) |
准备就绪 |
search |
19 |
是(本地)/网络(网络) |
就绪--取代Exa+Firecrawl |
database |
15 |
是 |
准备就绪--取代Supabase |
project-management |
16 |
是 |
准备就绪--取代Jira/Notion |
messaging |
12 |
是 |
准备就绪--代理协调 |
未完成
| 什么 |
状态 |
注释 |
| 无任何阻碍 |
-- |
所有阶段均已完成。矢量索引可能仍在首次运行时构建。 |
最近完成
| 什么 |
状态 |
注释 |
| CLI工具安装(阶段A) |
完成 |
pandoc 3.9,duckdb 1.4.4,chromadb 1.5.0,Python venv at .venv/ |
| CLI包装脚本(阶段B) |
完成 |
中有5个工具 tools/:索引文档、搜索、数据库、项目管理、消息 |
| FTS5索引已构建 |
完成 |
来自50个库(16个)中28363个文件的163973个块 |
| ChromaDB矢量索引 |
重建 |
163973个块,全MiniLM-L6-v2(运行 ./tools/index-docs build --vec) |
| Docker编写大纲(C阶段) |
完成 |
local-software/outline/ → http://localhost:3000 |
| 平面Docker编写(C阶段) |
完成 |
local-software/plane/ → http://localhost:8080 |
快速开始——开始跑步
一切都已建成。以下是如何使用它。
1.激活Python环境
cd /Users/lucassaintlaurent/Desktop/Workspace/GitHubVault/OfflineMPCs
source .venv/bin/activate
2.搜索文档(本地)
# Keyword search (fast, exact matches)
./tools/index-docs search "middleware authentication" --fts
# Semantic search (meaning-based, uses vector embeddings)
./tools/index-docs search "how to handle auth in middleware" --vec
# Hybrid search (both combined — default)
./tools/index-docs search "server components" --lib next.js
# Web search (DuckDuckGo)
./tools/search web "python sqlite fts5 tutorial"
3.查询数据
# Query CSV/JSON/Parquet directly (no import needed)
./tools/db query "SELECT * FROM 'data.csv' LIMIT 10"
# Query SQLite databases
./tools/db query "SELECT * FROM issues" --db data/projects.db
./tools/db describe data/projects.db
4.项目管理
./tools/pm project list
./tools/pm issue create OfflineMPCs "Add new docs repo" --priority high
./tools/pm issue list --status open
./tools/pm stats
5.代理消息传递
./tools/msg send general "Build phase complete"
./tools/msg read general
./tools/msg search "authentication"
6.可选web UI(Docker)
cd local-software
./start.sh # Start everything + open browser
./start.sh outline # Start only Outline (http://localhost:3000)
./start.sh plane # Start only Plane (http://localhost:8080)
./start.sh stop # Stop all services
./start.sh logs # Tail logs
./start.sh status # Check what's running
重建索引(添加新文档后)
source .venv/bin/activate
./tools/index-docs build --fts # Rebuild keyword index (~16s)
./tools/index-docs build --vec --force # Rebuild vector index (slow, one-time)
./tools/index-docs stats # Check index stats
./tools/index-docs libs # List indexed libraries
参考——已经做出的关键决策
- 自托管,不严格离线 --服务可以在本地网络上运行,而不仅仅是本地主机
- 将所有内容分叉到CYPNFT 克隆之前(GitHubVault惯例)
--depth 1 对于doc repos (仅供参考),软件仓库的完整克隆
- 剧作家MCP继续直播 --浏览器状态需要一个正在运行的进程,只有技能才能记录模式
- SKILL.md格式 定义于
JARVIS/Plans/Context7Offline.md 第三阶段
- 电话簿索引.json 是所有工具定义的真实来源
- CLI优先架构 --由CLI工具而非Docker服务支持的每一项技能
- 没有Gitea --GitHub(CYPKNFT)保持原样。
git CLI+ gh CLI已经涵盖了它
- Docker是可选的 --如果您想要可视化界面,则仅适用于web UI(大纲、平面)
- SQLite作为通用后端 --项目管理、消息传递、索引都使用SQLite。一个依赖关系,零服务器
参考——目录图
OfflineMPCs/
├── mcp-phonebooks/ # 11 cloned MCP server repos (REFERENCE ONLY)
│ ├── official-servers/ # filesystem (14), git (12), memory (9), fetch (1)
│ ├── github-mcp/ # 82 tools
│ ├── playwright-mcp/ # 26 tools
│ ├── notion-mcp/ # 22 tools
│ ├── atlassian-mcp/ # 46 tools (Jira 34 + Confluence 12)
│ ├── markdownify-mcp/ # 10 tools
│ ├── docker-mcp/ # 0 tools (gateway only)
│ ├── context7-mcp/ # 2 tools
│ ├── exa-mcp/ # 9 tools
│ ├── firecrawl-mcp/ # 8 tools
│ └── supabase-mcp/ # 32 tools
│
├── skills/ # SKILL.md files (ALL 11 READY)
│ ├── docs-lookup/SKILL.md # ✓ Context7 → rg over local docs (4 ops)
│ ├── file-ops/SKILL.md # ✓ Filesystem MCP → bash, find, rg (14 ops)
│ ├── git-ops/SKILL.md # ✓ Git MCP → git CLI + gh CLI (12 ops)
│ ├── memory/SKILL.md # ✓ Memory MCP → local JSON/SQLite (9 ops)
│ ├── container-ops/SKILL.md # ✓ Docker MCP → docker CLI (14 ops)
│ ├── doc-conversion/SKILL.md # ✓ Markdownify → Pandoc, Docling (10 ops)
│ ├── browser/SKILL.md # ✓ Playwright → MCP stays live (26 ops)
│ ├── search/SKILL.md # ✓ Exa/Firecrawl → ddgr + SQLite FTS5 (19 ops)
│ ├── database/SKILL.md # ✓ Supabase → DuckDB + SQLite (15 ops)
│ ├── project-management/SKILL.md # ✓ Jira/Notion → SQLite CLI (16 ops)
│ └── messaging/SKILL.md # ✓ Slack → SQLite messaging (12 ops)
│
├── docs/ # 50 cloned library repos (~5.4 GB) — DATA IS HERE
│ ├── python/ # cpython, flask, django, fastapi, pydantic, requests,
│ │ # sqlalchemy, pytest, pandas, numpy, pytorch,
│ │ # transformers, langchain, llama_index
│ ├── javascript/ # node, next.js, react, vue, svelte, express, hono,
│ │ # zod, tailwindcss, prisma, drizzle-orm, trpc, shadcn-ui
│ ├── rust/ # rust, rust-book, tokio, serde, axum, clap
│ ├── go/ # go, gin, fiber, gorm
│ ├── ai-ml/ # anthropic-sdk, openai-sdk, diffusers, vllm,
│ │ # llama.cpp, ollama, docling, chromadb, qdrant
│ └── infra/ # docker-docs, kubernetes, terraform, nginx
│
├── tools/ # ✓ CLI wrapper scripts (ALL 5 BUILT)
│ ├── index-docs # ✓ Python: hybrid FTS5 + ChromaDB vector search (430 lines)
│ ├── search # ✓ Python: unified local + web search (175 lines)
│ ├── db # ✓ Bash: DuckDB + SQLite query wrapper (205 lines)
│ ├── pm # ✓ Python: project management CRUD (310 lines)
│ └── msg # ✓ Python: agent messaging + channels (290 lines)
│
├── data/ # ✓ SQLite databases (CREATED)
│ ├── docs-index.db # ✓ FTS5 search index (163,973 chunks, 50 libraries)
│ ├── chromadb/ # ✓ Vector embeddings (all-MiniLM-L6-v2)
│ ├── projects.db # ✓ Project management data
│ └── messages.db # ✓ Agent messaging data (5 default channels)
│
├── .venv/ # Python virtual environment (chromadb + deps)
│
├── local-software/ # Docker Compose configs (OPTIONAL web UIs)
│ ├── start.sh # ✓ Launcher script (macOS/Linux) — start, stop, status, logs
│ ├── start.ps1 # ✓ Launcher script (Windows PowerShell)
│ ├── outline/ # ✓ Knowledge base (Notion replacement)
│ │ ├── docker-compose.yml # 3 containers: app + PostgreSQL + Valkey
│ │ └── docker.env # Environment config
│ └── plane/ # ✓ Project boards (Jira replacement)
│ ├── docker-compose.yml # 12 containers: full stack
│ └── plane.env # Environment config
│
├── manifests/
│ ├── phonebook-index.json # 273 tool definitions from 11 MCPs
│ ├── clone-manifest.json # 50 doc repos with hashes + sizes
│ └── skill-registry.json # 11 ready skills + test results
│
└── tests/
├── test-structure.sh # Level 1: structural validation
├── test-dependencies.sh # Level 2: dependency validation
├── test-functional.sh # Level 3: functional validation
└── results/ # JSON test results with timestamps
参考——工具分类(共273个)
| 分类 |
计数 |
含义 |
| 本地 |
67 |
现在可以使用了——CLI工具、文件系统、git、浏览器自动化 |
| 自托管 |
19 |
云API,带插入式自托管替换 |
| 仅限云 |
187 |
专有API-被自托管OSS平台取代 |
本地(67种工具)
无需设置即可工作。使用人: file-ops, git-ops, memory, doc-conversion, browser 技能。
| 来源 |
工具 |
内容 |
| 官方服务器/文件系统 |
14 |
读取、写入、编辑、移动、搜索、列出文件 |
| 官方服务器/git |
12 |
状态、差异、提交、添加、日志、分支、签出 |
| 官方服务器/内存 |
9 |
本地知识图上的CRUD(实体、关系、观察) |
| markdownify mcp |
7 |
pdf/docx/xlsx/pptx/图像/音频→ 降价转换 |
| 剧作家mcp |
25 |
点击、键入、截图、评估JS、表单填充等。 |
自托管→ CLI(19个工具)
云API被本地CLI工具取代。不需要服务器。
| 来源 |
工具 |
云→ CLI |
| firerawl mcp |
8 |
萤火虫云→ docling (OCR)+ curl + pandoc |
| supabase mcp |
11 |
supabase云→ duckdb + sqlite3 |
仅限云→ CLI替换(187个工具)
使用轻量级CLI工具取代API,而不是运行云平台的自托管副本。
| 云MCP |
工具 |
CLI替换 |
估计。覆盖范围 |
| github mcp |
82 |
未更换 --使用GitHub(CYPKNFT)+ gh CLI+ git CLI |
N/A |
| 澳大利亚海事委员会(Jira) |
34 |
tools/pm --SQLite支持的项目管理CLI |
~75% |
| atlasian mcp(汇流) |
12 |
tools/pm +markdown文件在 docs/ |
~70% |
| 概念mcp |
22 |
tools/pm +降价文件 |
~65% |
| suabase mcp(云操作) |
13 |
duckdb + sqlite3 |
~70% |
| mcp考试 |
9 |
tools/search — ddgr / requests +SQLite FTS5 |
约60% |
| markdownify mcp(网络) |
3 |
剧作家 + 多语言文档 |
~80% |
| 上下文7 mcp |
2 |
文档查找技能 (超过50个本地仓库) |
~95% |
| 官方服务器/fetch |
1 |
curl 或剧作家 |
~100% |
| 剧作家mcp(导航) |
1 |
继续担任现场mcp |
100% |
参考——安装指南
所需的CLI工具
brew install ripgrep pandoc duckdb
pip install docling chromadb
| 工具 |
目的 |
使用人 |
rg (ripgrep) |
快速文本搜索 |
文档查找、文件操作、搜索 |
pandoc |
文档转换(pdf、docx、html→ md) |
文档转换 |
duckdb |
CSV/JSON/Parket上的嵌入式SQL——无服务器 |
数据库 |
docling |
PDF/图像OCR到markdown |
文档转换 |
chromadb |
嵌入式矢量数据库——无服务器 |
搜索(语义) |
CLI包装工具(内置 tools/)
| 工具 |
功能 |
后端 |
tools/search |
网络搜索+本地全文索引 |
ddgr 或Python requests +SQLite FTS5 |
tools/db |
对任何数据格式的SQL查询 |
duckdb + sqlite3 |
tools/pm |
创建/更新/查询问题、冲刺、标签 |
SQLite(data/projects.db) |
tools/msg |
在代理之间发布/读取消息 |
SQLite(data/messages.db) |
tools/index-docs |
在所有50个文档仓库中构建可搜索的FTS5索引 |
SQLite(data/docs-index.db) |
可选Docker(仅限web UI)
只有当你想要人类的视觉界面时才需要。CLI工具在没有这些的情况下工作。
| 服务 |
用途 |
容器 |
部署 |
| 大纲 |
知识库web UI(您自己的概念) |
3(app+pg+valkey) |
./start.sh outline |
| 飞机 |
项目板web UI(您自己的Jira) |
12(全栈) |
./start.sh plane |
参考——文档查找(Context7替换)
最高优先级的技能。准备就绪--完全熟练.md skills/docs-lookup/SKILL.md.
# Resolve a library
find docs/ -maxdepth 2 -type d -iname "*next.js*"
# Search its docs
rg -n -C 3 --type md "middleware" docs/javascript/next.js/docs/
# Browse its API
rg -n "^export (default |const |function |class )" docs/javascript/next.js/packages/ --type ts | head -50
6个类别的50个图书馆。没有API密钥。没有费率限制。
更新中
cd /Users/lucassaintlaurent/Desktop/Workspace/GitHubVault/OfflineMPCs
# Update doc repos
find docs/ -maxdepth 3 -name ".git" -type d | while read g; do
r=$(dirname "$g"); echo "Updating $r..."; (cd "$r" && git pull --ff-only 2>/dev/null)
done
# Update MCP phone books
find mcp-phonebooks/ -maxdepth 2 -name ".git" -type d | while read g; do
r=$(dirname "$g"); echo "Updating $r..."; (cd "$r" && git pull --ff-only 2>/dev/null)
done