2mcp
将任何本地目录部署为具有索引、检索和引用功能的MCP知识服务器,旨在最大限度地在嵌入、OCR、转录和生成过程中使用Mistral模型。可选层包括ElevenLabs通过专用桥接二进制和x402请求门控(支付/请求门控协议)进行语音输出。
为什么dir2mcp
- 西北风第一管道:
- 嵌入: mistral-embed (文本)+ codestral-embed (代码) - OCR: mistral-ocr-latest - STT默认值: voxtral-mini-latest - RAG一代:Mistral聊天模型
- Single Go二进制(
dir2mcp)当地第一州.dir2mcp/ - 伴随桥二进制(
elevenlabs-bridge)ElevenLabs webhook工具 - MCP Streamable HTTP服务器,具有稳定的工具界面
- 多模式摄取:文本/代码、文档提取(文档或OCR)、转录本、结构化注释
- 引文感知检索和RAG式应答
- 可选的主持人支持的x402支付门控
tools/call - 具有两个二进制文件的回购布局:
- dir2mcp:MCP服务器和索引/运行时主机 - elevenlabs-bridge:ElevenLabs webhook工具的HTTP助手
dirstral终端客户端在单独的dirstral-cli回购。
安装
安装 dir2mcp 通过Homebrew水龙头:
brew install dirstral/tap/dir2mcp然后验证:
dir2mcp version从源代码构建仍然可用作替代方案:
git clone --recurse-submodules https://github.com/Dirstral/dir2mcp
cd dir2mcp
make build现有克隆: 跑git submodule update --init --recursive取dirstral-spec子模块。 要将规范更新为最新的固定版本,请执行以下操作:git submodule update --remote dirstral-spec.
运行时先决条件(按场景)
选择与你跑步方式相匹配的行 dir2mcp:
| 场景 | 必填 |
|---|---|
仅限本地MCP(127.0.0.1) | dir2mcp 二进制,加上 docling 或 MISTRAL_API_KEY 取决于提取器/生成模式 |
| 公共MCP(无隧道) | 本地MCP要求+可访问的主机/端口+安全身份验证令牌模式 |
| 通过Cloudflare隧道的公共MCP | 本地MCP要求+ cloudflared 已安装 |
| 通过ngrok公开MCP | 本地MCP要求+ ngrok 已安装+验证的ngrok帐户+authtoken |
| x402门控MCP | 公共MCP要求+主持人URL+主持人令牌+完整的x402路线策略字段 |
快速入门
构建先决条件(仅限源构建): 转到1.22+(go.dev/dl)以及 make.
git clone https://github.com/Dirstral/dir2mcp
cd dir2mcp
cp .env.example .env # add your API keys
# optional: create `.env.local` for local overrides
# (it takes precedence over `.env`)
# cp .env.example .env.local
make build
./dir2mcp up或者直接构建每个二进制文件:
go build -o dir2mcp ./cmd/dir2mcp/go build -o elevenlabs-bridge ./cmd/elevenlabs-bridge/
服务器在启动时打印其MCP端点URL。将您的MCP客户端指向该URL。 优先级(从高到低):shell环境变量> .env.local > .env.
当地发展环境
dir2mcp 自动加载两者 .env 和 .env.local 从工作目录中; .env.local 覆盖 .env,并且实际的shell环境变量具有最终优先级。
托管演示烟雾手册
要快速进行托管就绪检查(问题#19范围),请运行:
DIR2MCP_DEMO_URL="https://your-host.example/mcp" \
DIR2MCP_DEMO_TOKEN="" \
./scripts/smoke_hosted_demo.sh笔记:
DIR2MCP_DEMO_TOKEN每当启用身份验证时都需要。- 该脚本现在运行完整的MCP初始化序列(
initialize->notifications/initialized->tools/list->tools/call). - 如果你的端点是x402门控的,
tools/call返回HTTP402随着PAYMENT-REQUIRED被视为健康。
它验证了什么:
initialize返回HTTP 200和有效的MCP-Session-Idtools/list返回带有工具元数据的HTTP 200tools/call为了dir2mcp_list_files返回HTTP 200或HTTP 402PAYMENT-REQUIRED启用x402时
隧道设置(复制/粘贴)
Cloudflare快速隧道(无需帐户的快速模式):
cloudflared tunnel --url http://127.0.0.1:8087 --no-autoupdatengrok(需要经过验证的帐户+authtoken):
ngrok config add-authtoken
ngrok http http://127.0.0.1:8087从本地API获取ngrok公共URL:
curl -sS http://127.0.0.1:4040/api/tunnels \
| jq -r '.tunnels[] | select(.proto=="https") | .public_url'如果你没有 jq,从ngrok web UI复制公共URL(http://127.0.0.1:4040).
然后对任一隧道URL运行托管烟雾探测器:
DIR2MCP_DEMO_URL="https://
/mcp" \
DIR2MCP_DEMO_TOKEN="$(cat .dir2mcp/secret.token)" \
./scripts/smoke_hosted_demo.shCLI命令
| 命令 | 描述 |
|---|---|
up | 启动MCP服务器并开始索引 |
status | 显示语料库和索引状态 |
ask "" | 传统兼容性垫片;更喜欢 dirstral-cli 客户端用户体验 |
search "" | 传统兼容性垫片;更喜欢 dirstral-cli 客户端用户体验 |
open-file | 传统兼容性垫片;更喜欢 dirstral-cli 客户端用户体验 |
list-files | 传统兼容性垫片;更喜欢 dirstral-cli 客户端用户体验 |
reindex | 强制完全重新摄入 |
config init | 创建基线 .dir2mcp.yaml |
config print | 打印有效配置 |
install | 将dir2mcp安装到受支持的MCP客户端(例如。 dir2mcp install claude) |
uninstall | 从支持的MCP客户端中删除dir2mcp |
doctor | 运行客户端集成诊断 |
print-config | 打印客户端所需的MCP服务器JSON代码段 |
version | 打印版本 |
跑步 dir2mcp 无参数打印用法,您可以随时查阅以查看可用命令。 ask, search, open-file,以及 list-files 是传统的兼容性垫片;新客户端/编排器UX属于 dirstral-cli.
MCP工具
| 工具 | 说明 |
|---|---|
dir2mcp_search | 索引内容的语义搜索 |
dir2mcp_ask | RAG风格的带引文问答 |
dir2mcp_ask_audio | 用TTS音频响应提问 |
dir2mcp_transcribe | 从语料库转录音频文件 |
dir2mcp_annotate | 文档的结构化注释 |
dir2mcp_transcribe_and_ask | 转录后询问结果 |
dir2mcp_open_file | 使用span上下文按路径检索文件 |
dir2mcp_list_files | 列出带有元数据的索引文件 |
dir2mcp_stats | 语料库统计 |
配置
YAML配置(.dir2mcp.yaml)
磁盘上的主要配置文件是 .dir2mcp.yaml (由创建 dir2mcp config init). 将其用于持久、非敏感的设置,如连接器定义、默认值和其他选项 您可能希望检查源代码管理。此处定义的值可能会在运行时被以下内容覆盖 环境变量。
环境变量(覆盖/机密)
敏感密钥和临时运行时覆盖是通过环境变量提供的。他们采取 优先于YAML文件中的条目,并且便于API密钥、令牌或设置 因部署而异。常用的变量有:
| 变量 | 必填 | 描述 |
|---|---|---|
MISTRAL_API_KEY | 条件 | 嵌入、基于Mistral的提取/STT和生成所需;不需要仅记录只读提取流 |
DIR2MCP_INGEST_EXTRACTOR | 否 | 提取提供程序模式: auto (默认), docling, mistral,或 off |
DIR2MCP_DOCLING_COMMAND | 否 | 用于文档提取的可选本地命令模板(默认值: docling --to md --output - {input});设置/可用时,首选PDF/图像/办公风格文档提取 |
MISTRAL_BASE_URL | 否 | Mistral基本URL(默认值: https://api.mistral.ai) |
DIR2MCP_MISTRAL_MAX_OCR_PAYLOAD_BYTES | 否 | OCR和转录请求的最大编码Mistral上传有效载荷大小(以字节为单位)(默认值: 20971520);对于大型PDF或音频文件增加 |
DIR2MCP_AUTH_TOKEN | 否 | 身份验证令牌覆盖 |
DIR2MCP_SERVER_NAME | 否 | 覆盖MCP服务器名称(并建议 claude mcp add 别名)。默认为唯一 dir2mcp-- 从索引目录派生 |
DIR2MCP_SESSION_INACTIVITY_TIMEOUT | 否 | 会话不活动超时(默认值: 24h) |
DIR2MCP_SESSION_TIMEOUT | 否 | 已弃用的别名 DIR2MCP_SESSION_INACTIVITY_TIMEOUT;仍受支持,但已弃用 |
DIR2MCP_SESSION_MAX_LIFETIME | 否 | 最大会话生存期 |
DIR2MCP_HEALTH_CHECK_INTERVAL | 否 | 连接器运行状况轮询间隔(默认值: 5s) |
DIR2MCP_ALLOWED_ORIGINS | 否 | 逗号分隔的其他浏览器来源 |
DIR2MCP_X402_FACILITATOR_TOKEN | 无 | x402主持人携带令牌 |
ELEVENLABS_API_KEY | 否 | TTS/STT的ElevenLabs密钥 |
ELEVENLABS_BASE_URL | 否 | ElevenLabs基本URL(默认值: https://api.elevenlabs.io) |
对于Homebrew和其他已安装的工作流,您可以在 .dir2mcp.yaml:
mistral_max_ocr_payload_bytes: 26214400
ingest_extractor: auto
docling_command: docling --to md --output - {input}或者覆盖一次运行:
dir2mcp up --mistral-max-ocr-payload-bytes 26214400服务器标识
每 dir2mcp up 实例报告从索引目录导出的唯一MCP服务器名称。, dir2mcp-stas-legal-a1b2c3 和 dir2mcp-research-notes-9f44ee)使它们在MCP客户端列表中易于区分。
- 默认形状:
dir2mcp--,在哪里 `是索引目录的模糊基名,以及` 哈希其绝对路径(因此该名称在从同一位置重新运行时是稳定的)。 - 开发人员构建(本地构建的二进制文件,没有发布标签--
dir2mcp version报告v0.0.0-dev或vdev-,可选配+dirty)使用adir2mcp-dev--前缀,因此从您的仓库运行的开发构建在brew安装的版本旁边显示为一个单独的条目claude mcp list. - 通过YAML覆盖(
server.name: my-alias)或env(DIR2MCP_SERVER_NAME=my-alias).重写将逐字应用并绕过默认生成的名称,包括dir2mcp-dev-...dev构建使用的前缀。 - 这
dir2mcp up横幅打印即贴claude mcp add --transport http ...使用此名称的行;您注册的客户端别名由您选择。
身份验证令牌行为
dir2mcp 承载身份验证可以来自:
- `--auth file:
` (显式文件源)
DIR2MCP_AUTH_TOKEN(环境)- 自动生成
secret.token在州目录中(auth=auto默认)
操作指南:
- 在共享环境中,不要直接在命令行上传递承载令牌。
- 更喜欢令牌文件(`--auth file:
`)或环境变量。
ElevenLabs桥
elevenlabs-bridge 是一个单独的Go助手,用于转发ElevenLabs webhook 呼唤跑步 dir2mcp MCP终点。它从以下位置读取其配置 当前环境,并回归到合理的默认值:
| 变量 | 必填 | 描述 |
|---|---|---|
MCP_URL | 没有 | dir2mcp MCP端点URL。未设置时,网桥首先尝试 $STATE_DIR/connection.json,然后回落到 http://127.0.0.1:8087/mcp |
MCP_TOKEN | 否 | 用于的显式承载令牌 dir2mcp。设置后,将覆盖所有其他令牌源。未设置时,网桥按顺序解析凭据:首先检查 connection.json.token_file (里面 $STATE_DIR/connection.json 由...撰写 dir2mcp 使用时 `--auth file: |
)那么 $STATE_DIR/secret.token`,如果不存在身份验证,则最终退回到无身份验证 | ||
STATE_DIR | 没有 | dir2mcp 用于定位的状态目录 connection.json 以及令牌文件。违约: .dir2mcp 在桥接工作目录中 |
PORT | 否 | 网桥侦听端口。默认值: 8088 |
用途:
dir2mcp bridge elevenlabs
# Override defaults when needed.
MCP_URL="http://127.0.0.1:8087/mcp" \
STATE_DIR="/path/to/corpus/.dir2mcp" \
PORT=8088 \
dir2mcp bridge elevenlabs
# Legacy wrapper binary still works and forwards to the same integrated command.
make build-elevenlabs-bridge
./elevenlabs-bridge --state-dir /path/to/corpus/.dir2mcp如果你 dir2mcp 服务器已使用 --auth none,您可以省略 MCP_TOKEN 和 STATE_DIR.
安全默认值
- 默认侦听地址为本地(
127.0.0.1:0) --public绑定到0.0.0.0(除非明确--listen提供)--public随着--auth none除非被拒绝--force-insecure已设置- 浏览器来源已分配(本地主机默认值+显式添加)
可选x402模式
x402是可选的和附加的。配置为 --x402 off|on|required 以及主持人设置。
| 模式 | 行为 |
|---|---|
off | 禁用(默认) |
on | 已启用;如果配置不完整,则无法打开 |
required | 严格的验证和门控 |
必填字段 required 模式:
--x402-facilitator-url--x402-resource-base-url--x402-network(例如,CAIP-2eip155:8453)--x402-price--x402-scheme--x402-asset--x402-pay-toDIR2MCP_X402_FACILITATOR_TOKEN(或等效的秘密来源)
最小示例:
DIR2MCP_X402_FACILITATOR_TOKEN="" \
dir2mcp up \
--public \
--listen 0.0.0.0:8092 \
--x402 required \
--x402-facilitator-url https:// \
--x402-resource-base-url https:// \
--x402-network eip155:8453 \
--x402-price 1000 \
--x402-scheme exact \
--x402-asset usdc \
--x402-pay-to 0x1111111111111111111111111111111111111111如果未付费呼叫被正确阻止, tools/call 返回HTTP 402 加 PAYMENT-REQUIRED.
看 目录规范/docs/x402-支付适配器规范.md 对于完整的主持人适配器合同。
项目状态
实现了核心服务器、摄取管道、检索、引用和x402门控。看 问题 正在进行的工作。
生态系统分裂状态
问题 #113 跟踪回购拆分。
dir2mcp(此仓库):MCP服务器实现+桥接二进制dirstral-spec:规范规范/模式/版本控制dirstral-conformance:黑盒一致性线束dirstral-cli:客户端/编排器用户体验landfall:代码导航MCP服务器产品存根
拆分前审计总结:
- 交叉产品进口:无
dir2mcp实现(组成边界为MCP)。 - CLI边界:
internal/cli这里是服务器/引导CLI;客户端UX属于dirstral-cli. - 落地来源:产品范围来自问题 #112,现在由一个单独的存根回购表示。
- 文档目标映射:
- docs/SPEC.md -> dirstral-spec/docs/SPEC.md - docs/ECOSYSTEM.md -> dirstral-spec/docs/ECOSYSTEM.md - docs/x402-payment-adapter-spec.md -> dirstral-spec/docs/x402-payment-adapter-spec.md
CLI所有权/处置矩阵:
| 路径组 | 所有权 | 处置 |
|---|---|---|
internal/cli/up.go, internal/cli/reindex.go, internal/cli/status.go | dir2mcp | 保持 |
internal/cli/config_cmd.go, internal/cli/bridge.go | dir2mcp | 保持 |
internal/cli/ask.go, internal/cli/remote_commands.go | dirstral-cli 用户体验问题 | 保持面向协议的兼容性垫片(传统) |
tests/cli/* 用于服务器/引导命令 | dir2mcp | 保持 |
tests/cli/* 对于传统的远程/客户端风格的命令 | 转换覆盖率 | 保留,直到完全提取完成 |
文档
规范性文件保存在 dirstral-spec 子模块(单一真相来源 docs/*.md 这里的文件是指针存根):
- 目录规格/文档/VISION.md --产品愿景和战略方向
- 目录规范/docs/spec.md --规范行为、模式和运行时契约
- 目录规范/docs/ECOSYSTEM.md --生态系统/市场/发现/支付环境
- 目录规范/docs/x402-支付适配器规范.md --主持人适配器合同
- dir2mcp实现规范版本
0.5.x(版本控制)
发展
make check # fmt + vet + lint + cyclo + test + build
make cyclo # gocyclo -over 15 ./internal/ (install: go install github.com/fzipp/gocyclo/cmd/gocyclo@v0.6.0)
make build # build dir2mcp binary
make build-elevenlabs-bridge # build ElevenLabs bridge wrapper binary
make benchmark # run retrieval benchmarks发布自动化:
- 推a
v*标签触发器.github/workflows/release.yml并通过GoReleaser发布工件。 - Homebrew配方更新需要
HOMEBREW_TAP_GITHUB_TOKEN具有写入权限dirstral/homebrew-tap.
API注释:
retrieval.NewEngine现在需要一个上下文作为其第一个参数:
retrieval.NewEngine(ctx, stateDir, rootDir, cfg).
Engine.Ask获得了一个上下文感知变体AskWithContext
原始的 Ask 继续作为兼容性的薄包装而存在。
make check 包括 make lint,这需要 golangci-lint 本地安装。 make cyclo 运行CI使用的圈复杂度门。CI运行后,Go报告卡会从外部更新;如果徽章延迟,请从此存储库的goreportcard.com报告页面刷新它。
许可证
MIT。看 许可证.
