Token导航 LogoToken导航TokenDH.com
Obsidian Cloud MCP logo
文档知识stdio官方级别未说明来源级核验

Obsidian Cloud MCP

MCP Server

wrangler

通过云端部署支持同步的Obsidian MCP服务器,使AI助手如Claude可以跨设备访问你的知识库。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
知识管理基础设施即代码TypeScriptClaudeClaude

安装说明

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

作者 / 组织

benpeter

提供方

benpeter

最后核验

2026/5/17 20:20

运行时

Node.js

快速接入

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

命令预览

npx wrangler login

详细介绍

黑曜石云MCP

![100% Vibe_Coded](https://github.com/trieloff/vibe-coded-badge-action)

在云中部署具有同步支持的黑曜石MCP服务器。在任何设备(包括手机)上从Claude.ai访问您的保险库。

这是什么?

此存储库提供基础设施即代码来部署基于云的 黑曜石 实例与a 主控程序 (模型上下文协议)服务器。这使得像克劳德这样的人工智能助手可以在任何地方读写你的黑曜石金库。

问题: Obsidian在本地运行,因此当您在移动设备上或使用基于云的AI界面(如Claude.AI)时,AI助手无法访问您的保险库。

解决方案: 在启用同步的情况下在云中运行Obsidian,并通过OAuth保护的MCP服务器公开它。

建筑

该系统由两个主要部分组成:a Hetzner云服务器 运行Obsidian和MCP服务器,以及 Cloudflare工作人员 处理OAuth身份验证。

graph LR
    subgraph "Hetzner Server (Docker Compose)"
        direction TB
        C["Caddy
:80, :443
Auto HTTPS"]
        M["MCP Server
:3000 (internal)
Token Introspection"]
        O["Obsidian
:27123 (internal)
:3001 (GUI)"]
        C --> M --> O
    end

    subgraph "Cloudflare"
        W["Worker
OAuth + Introspect"]
    end

    subgraph "External"
        GH["GitHub OAuth"]
        LE["Let's Encrypt"]
        SYNC["Obsidian Sync"]
    end

    W --> GH
    C --> LE
    O --> SYNC
    M -.->|"Token Introspection"| W

详细组件视图

graph TB
    subgraph "User Devices"
        claude["Claude.ai
(any device)"]
        browser["Browser
(initial setup)"]
    end

    subgraph "Cloudflare Edge"
        worker["Cloudflare Worker
OAuth Provider"]
        kv["KV Store
(tokens, clients)"]
        do["Durable Object
(session state)"]
        worker --- kv
        worker --- do
    end

    subgraph github["GitHub"]
        gh_oauth["GitHub OAuth"]
    end

    subgraph "Hetzner Cloud Server"
        caddy["Caddy
Automatic HTTPS"]
        mcp["MCP Server
(Token Introspection)"]
        obsidian["Obsidian
+ Sync + Local REST API"]
        gui["KasmVNC Web GUI
:3001"]

        caddy -->|":443 → :3000"| mcp
        mcp -->|"REST API :27123"| obsidian
        obsidian --- gui
    end

    claude -->|"1. MCP Request"| caddy
    caddy -->|"2. 401 + Resource Metadata"| claude
    claude -->|"3. OAuth Flow"| worker
    worker -->|"4. GitHub Login"| gh_oauth
    gh_oauth -->|"5. Token"| worker
    worker -->|"6. Access Token"| claude
    claude -->|"7. MCP + Bearer Token"| caddy
    mcp -->|"8. Validate Token"| worker

    browser -->|"One-time setup"| gui

    style worker fill:#f59e0b,color:#000
    style mcp fill:#7c3aed,color:#fff
    style obsidian fill:#7c3aed,color:#fff
    style caddy fill:#22c55e,color:#000

身份验证流程(RFC 7662令牌自检)

MCP服务器和OAuth服务器位于不同的主机上。Claude.ai通过以下方式发现OAuth服务器 受保护资源元数据(RFC 9728),然后通过Cloudflare上的GitHub OAuth进行身份验证。Hetzner MCP服务器通过调用Cloudflare的自检端点来验证令牌。

sequenceDiagram
    participant C as Claude.ai
    participant H as Hetzner
(MCP Server)
    participant CF as Cloudflare
(OAuth Provider)
    participant GH as GitHub
(Identity)

    Note over C: User adds MCP connector
    C->>H: POST /mcp (no token)
    H-->>C: 401 Unauthorized

    C->>H: GET /.well-known/oauth-protected-resource
    H-->>C: {"authorization_servers": ["cloudflare-worker-url"]}

    C->>CF: GET /.well-known/oauth-authorization-server
    CF-->>C: {endpoints...}

    C->>CF: POST /register (Dynamic Client Registration)
    CF-->>C: {client_id, client_secret}

    C->>CF: GET /authorize (+ PKCE)
    CF->>GH: GitHub OAuth redirect
    GH-->>CF: Authorization code
    Note over CF: Verify email ∈ whitelist
    CF-->>C: Authorization code

    C->>CF: POST /token (code + code_verifier)
    CF-->>C: Access token (opaque)

    Note over C: MCP connection established
    C->>H: POST /mcp + Bearer token
    H->>CF: POST /introspect (token)
    CF-->>H: {"active": true, "sub": "..."}
    H-->>C: MCP response (tools, resources)

重要限制

部署后需要手动执行步骤。 基础设施部署、HTTPS和OAuth是完全自动化的,但有两件事需要通过Web GUI手动设置:
  1. 黑曜石同步登录 --Obsidian Sync没有无头CLI身份验证。您必须通过Web GUI登录一次。
  2. 本地REST API插件 --MCP服务器通过以下方式与Obsidian通信 本地REST API 社区插件。您必须手动安装和配置它:

- 打开黑曜石设置(在Web GUI中) - 首选 社区插件 → 浏览→ 搜索 “本地REST API” - 安装并启用插件 - 首选 设置→ 本地REST API: - 启用 “绑定到所有网络接口” (Docker网络需要) - 复制 API密钥 如插件设置所示 - 跑吧 “配置API密钥” 带有复制密钥的GitHub工作流

完成这两个步骤后,Sync和MCP服务器会自动运行。

先决条件

  1. Hetzner云帐户在这里注册
  2. 黑曜石同步许可证拿过来
  3. GitHub账号 --对于OAuth身份提供者
  4. Cloudflare帐户在这里注册 (免费版作品)
  5. 域名 --对于HTTPS(子域工作。, mcp.yourdomain.com)
  6. SSH密钥对 --用于服务器访问

快速开始

步骤1:Cloudflare Worker设置

Cloudflare Worker充当Claude.ai的OAuth提供者。

  1. 创建GitHub OAuth应用程序:

- 首选 - 授权回调URL: https://.workers.dev/callback - 注意 客户端ID客户端密钥

  1. 部署Worker:
   cd cloudflare-mcp-server
   npm install
   npx wrangler login

   # Create KV namespace
   npx wrangler kv namespace create OAUTH_KV

   # Update wrangler.jsonc with the KV namespace ID

   # Set secrets
   npx wrangler secret put GITHUB_CLIENT_ID
   npx wrangler secret put GITHUB_CLIENT_SECRET
   npx wrangler secret put COOKIE_ENCRYPTION_KEY  # openssl rand -base64 32

   # Deploy
   npx wrangler deploy
  1. 更新GitHub OAuth应用程序 带有已部署工作URL的回调URL。

步骤2:DNS设置

创建一条A记录,将您的域指向您的服务器IP:

类型名称
A. mcp``

(部署后您将获得IP,然后更新DNS。)

第三步:GitHub的秘密

将这些秘密添加到您的分叉存储库中:

机密描述
HCLOUD_TOKENHetzner Cloud API代币
SSH_PUBLIC_KEY您的SSH公钥
SSH_PRIVATE_KEY您的SSH私钥
VNC_PASSWORDWeb GUI访问密码

步骤4:部署Hetzner服务器

  1. 首选 行动部署基础设施运行工作流
  2. 输入您的域名(例如。, mcp.yourdomain.com)
  3. 等待3-5分钟进行部署+SSL证书

步骤5:配置黑曜石

  1. 更新DNS 使用工作流输出中的服务器IP
  2. 打开Web GUI: https://:3001

- 用户名: admin - 密码:您的 VNC_PASSWORD

  1. 登录黑曜石同步 在GUI中
  2. 安装并配置“本地REST API”插件:

- 首选 设置→ 社区插件→ 浏览 - 搜索 “本地REST API” 并安装它 - 启用插件 - 首选 设置→ 本地REST API: - 启用 “绑定到所有网络接口” - 复制 API密钥

  1. 运行“配置API密钥”工作流程 使用复制的密钥

步骤6:配置Claude.ai

在Claude.ai设置中,添加自定义MCP连接器:

字段
服务器URLhttps://mcp.yourdomain.com/mcp

Claude.ai将自动:

  1. 通过受保护的资源元数据发现OAuth服务器
  2. 将您重定向到GitHub进行登录
  3. 身份验证成功后建立MCP连接

步骤7:禁用Web GUI

初始设置后,禁用Web GUI以提高安全性:

  • 首选 行动切换Web GUI访问禁用

电子邮件白名单

访问受到GitHub电子邮件的限制。允许的电子邮件配置在:

cloudflare-mcp-server/src/github-handler.ts
const ALLOWED_EMAILS = new Set(["your-email@example.com"]);

组件

Hetzner服务器

集装箱用途港口
卡迪反向代理,自动HTTPS80,443(公共)
MCP服务器黑曜石MCP与代币内省3000(内部)
黑曜石带同步+本地REST API的Vault27123(内部),3001(GUI)

Cloudflare工作人员

终点目的
/.well-known/oauth-authorization-serverOAuth发现(RFC 8414)
/.well-known/oauth-protected-resource资源元数据(RFC 9728)
/authorizeOAuth授权
/callbackGitHub OAuth回调
/token代币兑换
/register动态客户端注册(RFC 7591)
/introspect令牌自检(RFC 7662)

MCP服务器环境

变量描述
MCP_AUTH_MODEintrospection --通过远程端点验证令牌
TOKEN_INTROSPECTION_URLCloudflare的URL /introspect 端点
OBSIDIAN_API_KEY本地REST API插件密钥
OBSIDIAN_BASE_URL内部黑曜石URL(http://obsidian:27123)
MCP_TRANSPORT_TYPEhttp --可流式HTTP传输

GitHub工作流

工作流描述
部署基础设施使用黑曜石+MCP+Cady创建Hetzner服务器
配置API密钥在服务器上设置REST API密钥
切换Web GUI访问通过启用/禁用GUI端口 DOCKER-USER iptables链
更新Docker镜像提取最新图像并重新启动容器
破坏基础设施删除所有Hetzner资源(键入“DESTROY”进行确认)

配置

变量描述默认值
server_typeHetzner服务器类型cx23
server_location服务器位置nbg1
enable_ipv4启用IPv4(每月+0.50欧元)true

服务器类型

类型规格月成本
cx232个vCPU,4 GB RAM约3.56欧元
cx334个vCPU,8 GB内存~5.94欧元

成本

组件每月成本
Hetzner cx23服务器~3.56欧元
IPv4地址0.50欧元
Cloudflare Worker免费层
域名~ 1欧元(如果需要)
黑曜石同步4-8美元
总计~ 8-12欧元/月

安全

认证

图层方法详细信息
MCP服务器OAuth 2.1通过Cloudflare Worker,通过RFC 7662自检验证令牌
OAuth身份GitHub OAuth电子邮件白名单限制访问
Web GUI基本身份验证用户名: admin,密码: VNC_PASSWORD
GUI防火墙iptablesDOCKER-USER链块端口3001禁用时

超文本传输安全协议

  • 自动证书 通过Let’s Encrypt
  • 自动续订 由Caddy处理
  • 无人工干预 必需的

网络

  • MCP仅通过HTTPS --通过Caddy的443端口
  • 仅限REST API内部 --端口27123未暴露在外
  • Web GUI受限 --不需要时可以禁用
  • 防火墙规则 --仅打开必要的端口(22、80、443)

故障排除

SSL证书无效:

  • 确保DNS A记录指向正确的IP
  • 等待5分钟以获得证书
  • 检查球童日志: docker logs caddy

MCP服务器返回401:

  • 令牌自检可能失败
  • 检查MCP日志: docker logs obsidian-mcp
  • 验证Cloudflare Worker是否已部署,以及 /introspect 端点工作

OAuth重定向错误:

  • 验证GitHub OAuth应用程序回调URL是否与工作URL匹配
  • 在中检查电子邮件白名单 github-handler.ts

Web GUI无法访问:

  • 检查DOCKER-USER iptables规则是否被阻塞: iptables -L DOCKER-USER -n
  • 使用“启用”运行切换Web GUI工作流

清理

要摧毁所有基础设施:

# Via GitHub Actions (recommended)
# Actions → Destroy Infrastructure → type "DESTROY"

# Or via Terraform
cd terraform
terraform destroy

存储库结构

obsidian-cloud-mcp/
├── cloudflare-mcp-server/   # Cloudflare Worker (OAuth + Introspection)
│   ├── src/
│   │   ├── index.ts           # MCP proxy + OAuthProvider
│   │   ├── github-handler.ts  # GitHub OAuth + email whitelist + /introspect
│   │   ├── utils.ts           # OAuth helpers
│   │   └── workers-oauth-utils.ts  # CSRF, state management
│   └── wrangler.jsonc         # Cloudflare config
├── docker/                    # Docker Compose for Hetzner
│   ├── docker-compose.yml
│   ├── Caddyfile
│   └── .env.example
├── mcp-server/                # MCP server Dockerfile
│   └── Dockerfile
├── scripts/
│   ├── cloud-init.yml         # Server provisioning
│   ├── setup-mcp.sh           # Manual setup alternative
│   └── health-check.sh        # Health monitoring
├── .github/workflows/
│   ├── deploy.yml             # Deploy Hetzner infrastructure
│   ├── configure-api-key.yml  # Set Obsidian API key
│   ├── toggle-gui.yml         # Enable/disable Web GUI
│   ├── update.yml             # Update Docker images
│   └── destroy.yml            # Destroy infrastructure
└── terraform/                 # Hetzner IaC

许可证

Apache 2.0——请参阅 许可证

目录标签

目录标签

知识管理基础设施即代码TypeScriptClaude本地部署云端同步AI集成OAuth认证

支持客户端

Claude

接入字段

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

stdio

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

oauth

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

wrangler

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdiooauth部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP