← Back to Plugins
MCP Server MCP

Markdown Vault MCP

github By github 👁 1 views ▲ 0 votes

Markdown vault MCP server with FTS5 + semantic search and frontmatter indexing

Homepage Verified source GitHub

Install

uvx markdown-vault-mcp

Configuration Example

{
  "remotes": [],
  "packages": [
    {
      "registryType": "pypi",
      "identifier": "markdown-vault-mcp",
      "version": "3.1.0",
      "runtimeHint": "uvx",
      "transport": {
        "type": "stdio"
      },
      "environmentVariables": [
        {
          "description": "Absolute path to the markdown vault directory",
          "isRequired": true,
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_SOURCE_DIR"
        },
        {
          "description": "Disable write tools",
          "format": "boolean",
          "default": "true",
          "name": "MARKDOWN_VAULT_MCP_READ_ONLY"
        },
        {
          "description": "Log level for FastMCP internals; app loggers default to INFO, -v overrides both to DEBUG",
          "default": "INFO",
          "choices": [
            "DEBUG",
            "INFO",
            "WARNING",
            "ERROR"
          ],
          "name": "FASTMCP_LOG_LEVEL"
        },
        {
          "description": "Unified key-value backend for HTTP session persistence (file:///path or memory://). Legacy alias: MARKDOWN_VAULT_MCP_EVENT_STORE_URL",
          "default": "file:///data/state",
          "name": "MARKDOWN_VAULT_MCP_KV_STORE_URL"
        },
        {
          "description": "MCP server name shown to clients",
          "default": "markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_SERVER_NAME"
        },
        {
          "description": "Directory for index and embeddings state files",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_STATE_PATH"
        },
        {
          "description": "Path to the FTS5 SQLite index file",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_INDEX_PATH"
        },
        {
          "description": "Path to the numpy embeddings file",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_EMBEDDINGS_PATH"
        },
        {
          "description": "Comma-separated frontmatter fields to index for search",
          "name": "MARKDOWN_VAULT_MCP_INDEXED_FIELDS"
        },
        {
          "description": "Comma-separated frontmatter fields required on every document",
          "name": "MARKDOWN_VAULT_MCP_REQUIRED_FIELDS"
        },
        {
          "description": "Comma-separated glob patterns to exclude from indexing",
          "name": "MARKDOWN_VAULT_MCP_EXCLUDE"
        },
        {
          "description": "Embedding provider to use",
          "choices": [
            "openai",
            "ollama",
            "fastembed",
            "fastembed-gpu"
          ],
          "name": "MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER"
        },
        {
          "description": "OpenAI API key (required when MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER=openai)",
          "isSecret": true,
          "name": "OPENAI_API_KEY"
        },
        {
          "description": "OpenAI-compatible API base URL (e.g. SiliconFlow, Together, internal gateways); also accepts MARKDOWN_VAULT_MCP_OPENAI_BASE_URL",
          "default": "https://api.openai.com/v1",
          "name": "OPENAI_BASE_URL"
        },
        {
          "description": "OpenAI-compatible embedding model name; also accepts MARKDOWN_VAULT_MCP_OPENAI_EMBEDDING_MODEL",
          "default": "text-embedding-3-small",
          "name": "OPENAI_EMBEDDING_MODEL"
        },
        {
          "description": "Ollama embedding model name",
          "default": "nomic-embed-text",
          "name": "MARKDOWN_VAULT_MCP_OLLAMA_MODEL"
        },
        {
          "description": "Force CPU-only inference for Ollama",
          "format": "boolean",
          "default": "false",
          "name": "MARKDOWN_VAULT_MCP_OLLAMA_CPU_ONLY"
        },
        {
          "description": "Ollama server base URL",
          "default": "http://localhost:11434",
          "name": "OLLAMA_HOST"
        },
        {
          "description": "Git authentication token for push/pull",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_GIT_TOKEN"
        },
        {
          "description": "Remote git repository URL for managed mode",
          "name": "MARKDOWN_VAULT_MCP_GIT_REPO_URL"
        },
        {
          "description": "Git username for token auth",
          "default": "x-access-token",
          "name": "MARKDOWN_VAULT_MCP_GIT_USERNAME"
        },
        {
          "description": "Git committer name",
          "default": "markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_GIT_COMMIT_NAME"
        },
        {
          "description": "Git committer email",
          "default": "noreply@markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_GIT_COMMIT_EMAIL"
        },
        {
          "description": "Seconds to wait before pushing (batches writes)",
          "format": "number",
          "default": "30",
          "name": "MARKDOWN_VAULT_MCP_GIT_PUSH_DELAY_S"
        },
        {
          "description": "Enable Git LFS support",
          "format": "boolean",
          "default": "true",
          "name": "MARKDOWN_VAULT_MCP_GIT_LFS"
        },
        {
          "description": "Seconds between periodic git pulls (0 to disable)",
          "format": "number",
          "default": "600",
          "name": "MARKDOWN_VAULT_MCP_GIT_PULL_INTERVAL_S"
        },
        {
          "description": "Comma-separated allowed attachment extensions, or * for all",
          "name": "MARKDOWN_VAULT_MCP_ATTACHMENT_EXTENSIONS"
        },
        {
          "description": "Maximum attachment size in MB (0 for unlimited)",
          "format": "number",
          "default": "10",
          "name": "MARKDOWN_VAULT_MCP_MAX_ATTACHMENT_SIZE_MB"
        },
        {
          "description": "Folder name for note templates within the vault",
          "default": "_templates",
          "name": "MARKDOWN_VAULT_MCP_TEMPLATES_FOLDER"
        },
        {
          "description": "Path to user-defined MCP prompt templates",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_PROMPTS_FOLDER"
        },
        {
          "description": "Bearer token for authentication",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_BEARER_TOKEN"
        },
        {
          "description": "OIDC auth mode: 'remote' (JWKS validation) or 'oidc-proxy' (OAuth proxy). Auto-detected if not set.",
          "name": "MARKDOWN_VAULT_MCP_AUTH_MODE"
        },
        {
          "description": "Public base URL of this server (required for OIDC)",
          "name": "MARKDOWN_VAULT_MCP_BASE_URL"
        },
        {
          "description": "OIDC discovery endpoint URL",
          "name": "MARKDOWN_VAULT_MCP_OIDC_CONFIG_URL"
        },
        {
          "description": "OIDC client ID",
          "name": "MARKDOWN_VAULT_MCP_OIDC_CLIENT_ID"
        },
        {
          "description": "OIDC client secret",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_OIDC_CLIENT_SECRET"
        },
        {
          "description": "Signing key for OIDC session JWTs (critical on Linux/Docker)",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_OIDC_JWT_SIGNING_KEY"
        },
        {
          "description": "Expected OIDC token audience",
          "name": "MARKDOWN_VAULT_MCP_OIDC_AUDIENCE"
        },
        {
          "description": "Space-separated required OIDC scopes",
          "default": "openid",
          "name": "MARKDOWN_VAULT_MCP_OIDC_REQUIRED_SCOPES"
        },
        {
          "description": "Verify access token JWT instead of id_token",
          "format": "boolean",
          "default": "false",
          "name": "MARKDOWN_VAULT_MCP_OIDC_VERIFY_ACCESS_TOKEN"
        },
        {
          "description": "Override Claude app domain for MCP Apps iframe sandboxing",
          "name": "MARKDOWN_VAULT_MCP_APP_DOMAIN"
        }
      ]
    },
    {
      "registryType": "oci",
      "identifier": "ghcr.io/pvliesdonk/markdown-vault-mcp:v3.1.0",
      "transport": {
        "type": "streamable-http",
        "url": "http://localhost:{--port}/mcp"
      },
      "packageArguments": [
        {
          "description": "Port for the HTTP transport",
          "default": "8000",
          "type": "named",
          "name": "--port"
        }
      ],
      "environmentVariables": [
        {
          "description": "Path to the vault directory inside the container",
          "format": "filepath",
          "default": "/data/vault",
          "name": "MARKDOWN_VAULT_MCP_SOURCE_DIR"
        },
        {
          "description": "Disable write tools",
          "format": "boolean",
          "default": "true",
          "name": "MARKDOWN_VAULT_MCP_READ_ONLY"
        },
        {
          "description": "Log level for FastMCP internals; app loggers default to INFO, -v overrides both to DEBUG",
          "default": "INFO",
          "choices": [
            "DEBUG",
            "INFO",
            "WARNING",
            "ERROR"
          ],
          "name": "FASTMCP_LOG_LEVEL"
        },
        {
          "description": "Persistent-state backend URL for pvl-core subsystems. Schemes: file:///path (survives restarts), memory:// (dev/ephemeral).",
          "default": "file:///data/state",
          "name": "MARKDOWN_VAULT_MCP_KV_STORE_URL"
        },
        {
          "description": "MCP server name shown to clients",
          "default": "markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_SERVER_NAME"
        },
        {
          "description": "Directory for index and embeddings state files",
          "format": "filepath",
          "default": "/data/state",
          "name": "MARKDOWN_VAULT_MCP_STATE_PATH"
        },
        {
          "description": "Path to the FTS5 SQLite index file",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_INDEX_PATH"
        },
        {
          "description": "Path to the numpy embeddings file",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_EMBEDDINGS_PATH"
        },
        {
          "description": "Comma-separated frontmatter fields to index for search",
          "name": "MARKDOWN_VAULT_MCP_INDEXED_FIELDS"
        },
        {
          "description": "Comma-separated frontmatter fields required on every document",
          "name": "MARKDOWN_VAULT_MCP_REQUIRED_FIELDS"
        },
        {
          "description": "Comma-separated glob patterns to exclude from indexing",
          "name": "MARKDOWN_VAULT_MCP_EXCLUDE"
        },
        {
          "description": "Embedding provider to use",
          "choices": [
            "openai",
            "ollama",
            "fastembed",
            "fastembed-gpu"
          ],
          "name": "MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER"
        },
        {
          "description": "OpenAI API key (required when MARKDOWN_VAULT_MCP_EMBEDDING_PROVIDER=openai)",
          "isSecret": true,
          "name": "OPENAI_API_KEY"
        },
        {
          "description": "OpenAI-compatible API base URL (e.g. SiliconFlow, Together, internal gateways); also accepts MARKDOWN_VAULT_MCP_OPENAI_BASE_URL",
          "default": "https://api.openai.com/v1",
          "name": "OPENAI_BASE_URL"
        },
        {
          "description": "OpenAI-compatible embedding model name; also accepts MARKDOWN_VAULT_MCP_OPENAI_EMBEDDING_MODEL",
          "default": "text-embedding-3-small",
          "name": "OPENAI_EMBEDDING_MODEL"
        },
        {
          "description": "Ollama embedding model name",
          "default": "nomic-embed-text",
          "name": "MARKDOWN_VAULT_MCP_OLLAMA_MODEL"
        },
        {
          "description": "Force CPU-only inference for Ollama",
          "format": "boolean",
          "default": "false",
          "name": "MARKDOWN_VAULT_MCP_OLLAMA_CPU_ONLY"
        },
        {
          "description": "Ollama server base URL",
          "default": "http://localhost:11434",
          "name": "OLLAMA_HOST"
        },
        {
          "description": "Git authentication token for push/pull",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_GIT_TOKEN"
        },
        {
          "description": "Remote git repository URL for managed mode",
          "name": "MARKDOWN_VAULT_MCP_GIT_REPO_URL"
        },
        {
          "description": "Git username for token auth",
          "default": "x-access-token",
          "name": "MARKDOWN_VAULT_MCP_GIT_USERNAME"
        },
        {
          "description": "Git committer name",
          "default": "markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_GIT_COMMIT_NAME"
        },
        {
          "description": "Git committer email",
          "default": "noreply@markdown-vault-mcp",
          "name": "MARKDOWN_VAULT_MCP_GIT_COMMIT_EMAIL"
        },
        {
          "description": "Seconds to wait before pushing (batches writes)",
          "format": "number",
          "default": "30",
          "name": "MARKDOWN_VAULT_MCP_GIT_PUSH_DELAY_S"
        },
        {
          "description": "Enable Git LFS support",
          "format": "boolean",
          "default": "true",
          "name": "MARKDOWN_VAULT_MCP_GIT_LFS"
        },
        {
          "description": "Seconds between periodic git pulls (0 to disable)",
          "format": "number",
          "default": "600",
          "name": "MARKDOWN_VAULT_MCP_GIT_PULL_INTERVAL_S"
        },
        {
          "description": "Comma-separated allowed attachment extensions, or * for all",
          "name": "MARKDOWN_VAULT_MCP_ATTACHMENT_EXTENSIONS"
        },
        {
          "description": "Maximum attachment size in MB (0 for unlimited)",
          "format": "number",
          "default": "10",
          "name": "MARKDOWN_VAULT_MCP_MAX_ATTACHMENT_SIZE_MB"
        },
        {
          "description": "Folder name for note templates within the vault",
          "default": "_templates",
          "name": "MARKDOWN_VAULT_MCP_TEMPLATES_FOLDER"
        },
        {
          "description": "Path to user-defined MCP prompt templates",
          "format": "filepath",
          "name": "MARKDOWN_VAULT_MCP_PROMPTS_FOLDER"
        },
        {
          "description": "Run as this UID (Docker entrypoint)",
          "format": "number",
          "default": "1000",
          "name": "PUID"
        },
        {
          "description": "Run as this GID (Docker entrypoint)",
          "format": "number",
          "default": "1000",
          "name": "PGID"
        },
        {
          "description": "Bearer token for authentication",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_BEARER_TOKEN"
        },
        {
          "description": "OIDC auth mode: 'remote' (JWKS validation) or 'oidc-proxy' (OAuth proxy). Auto-detected if not set.",
          "name": "MARKDOWN_VAULT_MCP_AUTH_MODE"
        },
        {
          "description": "Public base URL of this server (required for OIDC)",
          "name": "MARKDOWN_VAULT_MCP_BASE_URL"
        },
        {
          "description": "OIDC discovery endpoint URL",
          "name": "MARKDOWN_VAULT_MCP_OIDC_CONFIG_URL"
        },
        {
          "description": "OIDC client ID",
          "name": "MARKDOWN_VAULT_MCP_OIDC_CLIENT_ID"
        },
        {
          "description": "OIDC client secret",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_OIDC_CLIENT_SECRET"
        },
        {
          "description": "Signing key for OIDC session JWTs (critical on Linux/Docker)",
          "isSecret": true,
          "name": "MARKDOWN_VAULT_MCP_OIDC_JWT_SIGNING_KEY"
        },
        {
          "description": "Expected OIDC token audience",
          "name": "MARKDOWN_VAULT_MCP_OIDC_AUDIENCE"
        },
        {
          "description": "Space-separated required OIDC scopes",
          "default": "openid",
          "name": "MARKDOWN_VAULT_MCP_OIDC_REQUIRED_SCOPES"
        },
        {
          "description": "Verify access token JWT instead of id_token",
          "format": "boolean",
          "default": "false",
          "name": "MARKDOWN_VAULT_MCP_OIDC_VERIFY_ACCESS_TOKEN"
        },
        {
          "description": "Override Claude app domain for MCP Apps iframe sandboxing",
          "name": "MARKDOWN_VAULT_MCP_APP_DOMAIN"
        }
      ]
    }
  ]
}
mcp model-context-protocol pypi oci

Comments

Sign in to leave a comment

Loading comments...