A modern, serverless solution for indexing Obsidian notes using Cloudflare's official OAuth 2.1 pattern, Vectorize, and Workers AI, with native Model Context Protocol (MCP) support.
- Cost Effective: ~$0-10/month for typical personal use (250 - 2.5k Notes)
- Affordable Embedding Costs: Workers AI embedding models used - no OpenAI API fees needed
- Official Cloudflare OAuth 2.1: Uses
@cloudflare/workers-oauth-provider - Standards Compliant: Follows MCP v2025-03-26 specification with Streamable HTTP transport
- Global Edge Performance: 300+ locations worldwide
- Serverless Simplicity: No infrastructure management required
- 15-Minute Setup: Get running quickly with simple commands
Note: This project requires git clone to access all necessary configuration files and source code for deployment.
# Clone the repository
git clone https://github.com/ben-vargas/obsidian-vectorize-mcp.git
cd obsidian-vectorize-mcp
# Install obvec CLI globally (includes all dependencies)
npm install -g .
# Copy and configure wrangler.toml
cp wrangler.toml.example wrangler.toml
# Login to Cloudflare
obvec login
# Create KV namespaces
wrangler kv:namespace create kv
wrangler kv:namespace create oauth_tokens
# Update wrangler.toml with the returned namespace IDs
# Create R2 bucket
wrangler r2 bucket create obsidian-vectorize
# Set your password
wrangler secret put MCP_PASSWORD# Deploy your MCP server
obvec deploy
# Create and configure .env file (required)
cp .env.example .env
# Edit .env with:
# WORKER_URL=https://obvec.<your-cloudflare-subdomain>.workers.dev
# MCP_PASSWORD=your-secure-password-here
# OBSIDIAN_VAULT_PATH=/path/to/your/vault
# Index your vault
obvec index# Create .dev.vars for local Worker environment
echo "MCP_PASSWORD=your-local-password" > .dev.vars
# Create .env for CLI scripts
cp .env.example .env
# Edit .env with:
# WORKER_URL=http://localhost:8787
# MCP_PASSWORD=your-local-password
# OBSIDIAN_VAULT_PATH=/path/to/vault
# Start local development server
obvec dev
# In another terminal, index your vault
obvec indexNote about Connectors: Claude.ai uses "Connectors" to integrate with MCP servers. If you add a Connector on claude.ai (Web), it will also appear in Claude Desktop - no additional configuration needed. However, Claude Code requires separate MCP configuration.
On claude.ai, add a custom MCP Connector:
- Go to Settings β Connectors
- Click "Add Custom Connector"
- Enter your MCP endpoint:
- Streamable HTTP:
https://obvec.<account_subdomain>.workers.dev/mcp(recommended - current MCP spec) - SSE:
https://obvec.<account_subdomain>.workers.dev/sse(deprecated - only use if required)
- Streamable HTTP:
Note: The MCP specification deprecated SSE on March 26, 2025. We recommend using the Streamable HTTP endpoint.
When you first connect, a browser window will open for OAuth authentication. Enter your password to authorize access. This Connector will automatically sync to your Claude Desktop app.
Add via command line:
claude mcp add -s user -t http obvec https://obvec.<account_subdomain>.workers.dev/mcpBreaking this down:
claude mcp add- The command to add an MCP server-s user- Scope set to "user" (applies to all your projects, not just the current one)-t http- Transport type for the new Streamable HTTP protocolobvec- The name you want to give the serverhttps://obvec.<account_subdomain>.workers.dev/mcp- The URL of your MCP endpoint
Note for Claude Code users: OAuth tokens now default to 30 days to prevent frequent re-authentication. If you still experience timeouts, see troubleshooting.
If you prefer to configure Claude Desktop directly instead of using Connectors, add to your claude_desktop_config.json:
{
"mcpServers": {
"obvec": {
"type": "http",
"url": "https://obvec.<account_subdomain>.workers.dev/mcp"
}
}
}Replace <account_subdomain> with your actual Cloudflare Workers subdomain in all examples.
Connect your Obsidian vault to ChatGPT as a searchable knowledge source:
-
Add as ChatGPT Connector:
- Go to ChatGPT Settings β Connectors
- Add connector with URL:
https://obvec.<account_subdomain>.workers.dev/chatgpt/mcp - Authenticate via OAuth when prompted
- Select the connector in any chat where Connectors are supported
-
Basic Configuration:
# In wrangler.toml OBSIDIAN_VAULT_NAME = "YourVaultName" # For proper Obsidian URL generation CHATGPT_MIN_SCORE = "0.3" # Result threshold (lower = more results)
-
Works with all ChatGPT features where Connectors are available (except GPT-5 Pro mode)
π For advanced configuration, QDF support, and troubleshooting, see docs/chatgpt-integration.md
- Standards Compliant: Uses Cloudflare's official OAuth Provider Library
- PKCE Security: Proof Key for Code Exchange for enhanced security
- Simple Setup: One password via
wrangler secret put MCP_PASSWORD - MCP Compatible: Works with claude.ai, Claude Desktop, Cursor, Windsurf out of the box
Each person who clones this repo gets:
- Their own Worker deployment and URL
- Their own password protection (
MCP_PASSWORDsecret) - Their own OAuth KV namespace
- Complete isolation from other deployments
obvec/
βββ bin/
β βββ obvec.js # CLI executable
βββ docs/ # Documentation
β βββ advanced-configuration.md # Smart re-indexing and OAuth setup
β βββ architecture.md # Technical architecture details
β βββ mcp-implementation.md # MCP protocol details
β βββ pricing-and-performance.md # Cost analysis and performance info
β βββ troubleshooting.md # Common issues and diagnostics
βββ scripts/
β βββ index-vault.ts # Vault indexing script
β βββ search-notes.ts # CLI search utility
β βββ get-stats.ts # Index statistics
β βββ reset-index.ts # Clear all indexed data
β βββ cleanup-orphaned.ts # Remove deleted notes
βββ src/
β βββ api/ # API endpoints
β β βββ cleanup.ts # Cleanup orphaned notes
β β βββ index.ts # Index management
β β βββ list-indexed.ts # List indexed notes
β β βββ router.ts # API router
β β βββ search.ts # Search functionality
β β βββ stats.ts # Statistics endpoint
β β βββ test-mcp.ts # MCP testing utilities
β βββ auth/ # Authentication UI
β β βββ app.ts # OAuth app handler
β βββ mcp/ # MCP server implementations
β β βββ server.ts # Standard MCP server (full tools)
β β βββ server-chatgpt.ts # ChatGPT-specific server (search/fetch only)
β βββ types/ # TypeScript types
β β βββ index.ts # Type definitions
β βββ utils/ # Utility functions
β β βββ auth.ts # Authentication utilities
β β βββ embeddings.ts # Embedding generation
β β βββ formatting.ts # Text formatting
β β βββ hash.ts # Hashing utilities
β β βββ security.ts # Security utilities
β β βββ validation.ts # Input validation
β βββ index.ts # Main Worker entry
βββ .env.example # Environment variables template
βββ .gitignore # Git ignore patterns
βββ .mcp.json.example # MCP configuration example
βββ LICENSE # MIT License
βββ README.md # This file
βββ package.json # NPM package config
βββ tsconfig.json # TypeScript config
βββ wrangler.toml.example # Cloudflare Worker config template
obvec login # Login to Cloudflare (alias for wrangler login)
obvec deploy # Deploy to production (alias for wrangler deploy)
obvec dev # Start local development (alias for wrangler dev)obvec index # Index your Obsidian vault
obvec search "AI" # Search your notes from CLI
obvec reset # Clear and reset the entire index
obvec cleanup # Remove orphaned notes (deleted from vault)
obvec info # Show MCP connection information# Basic search
obvec search "machine learning"
# Limit results
obvec search "productivity" --limit 20
# JSON output for scripting
obvec search "meetings" --json
# Verbose mode (includes up to 1000 chars from vectorize index)
obvec search "projects" --verbose# Set your MCP password
wrangler secret put MCP_PASSWORD
# Create OAuth KV namespace
wrangler kv:namespace create oauth_tokens
# View deployment logs
wrangler tailFor common issues and debugging tips, see docs/troubleshooting.md.
For detailed pricing information, free tier limits, and cost scenarios, see docs/pricing-and-performance.md.
This project automatically creates and configures the following Cloudflare resources:
- Vectorize Index:
obsidian-notes(1024 dimensions, cosine similarity) - KV Namespaces: OAuth token storage and caching
- R2 Bucket: Full note content storage and retrieval
- Workers AI: Embedding generation (included with Workers subscription)
These resources are created during the setup process and work together to provide semantic search across your Obsidian vault.
For advanced features like smart re-indexing, timestamp queries, custom embedding models, and OAuth configuration, see docs/advanced-configuration.md.
For detailed guides, see:
- ChatGPT Integration - ChatGPT connector setup and configuration
- Architecture - Technical implementation details
- Advanced Configuration - Power user features
- Pricing & Performance - Cost analysis and limits
- Troubleshooting - Common issues and debugging
- MCP Implementation - MCP protocol details
- Fork the repository
- Create a feature branch
- Test with your own Obsidian vault
- Submit a pull request
MIT License - see LICENSE file for details