{
  "slug": "io-github-alex-feel-mcp-context-server",
  "name": "io.github.alex-feel/mcp-context-server",
  "title": "mcp-context-server",
  "description": "An MCP server that provides persistent multimodal context storage for LLM agents.",
  "version": "2.2.2",
  "publishedAt": "2026-03-28T20:10:19.188244Z",
  "updatedAt": "2026-03-28T20:10:19.188244Z",
  "repoUrl": "https://github.com/alex-feel/mcp-context-server",
  "websiteUrl": null,
  "namespace": {
    "type": "github",
    "owner": "alex-feel"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "pypi",
      "identifier": "mcp-context-server",
      "version": "2.2.2",
      "transport": "stdio",
      "runtimeHint": null
    },
    {
      "registryType": "oci",
      "identifier": "ghcr.io/alex-feel/mcp-context-server:2.2.2",
      "version": null,
      "transport": "streamable-http",
      "runtimeHint": "docker"
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "LOG_LEVEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Log level"
    },
    {
      "name": "STORAGE_BACKEND",
      "isSecret": false,
      "isRequired": false,
      "description": "Storage backend type: sqlite (default) or postgresql"
    },
    {
      "name": "MAX_IMAGE_SIZE_MB",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum individual image size in megabytes"
    },
    {
      "name": "MAX_TOTAL_SIZE_MB",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum total request size in megabytes"
    },
    {
      "name": "DB_PATH",
      "isSecret": false,
      "isRequired": false,
      "description": "Custom database file location path"
    },
    {
      "name": "POOL_MAX_READERS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of concurrent read connections in the pool"
    },
    {
      "name": "POOL_MAX_WRITERS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of concurrent write connections in the pool"
    },
    {
      "name": "POOL_CONNECTION_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Connection timeout in seconds"
    },
    {
      "name": "POOL_IDLE_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Idle connection timeout in seconds"
    },
    {
      "name": "POOL_HEALTH_CHECK_INTERVAL_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Connection health check interval in seconds"
    },
    {
      "name": "RETRY_MAX_RETRIES",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of retry attempts for failed operations"
    },
    {
      "name": "RETRY_BASE_DELAY_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Base delay in seconds between retry attempts"
    },
    {
      "name": "RETRY_MAX_DELAY_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum delay in seconds between retry attempts"
    },
    {
      "name": "RETRY_JITTER",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable random jitter in retry delays"
    },
    {
      "name": "RETRY_BACKOFF_FACTOR",
      "isSecret": false,
      "isRequired": false,
      "description": "Exponential backoff multiplication factor for retries"
    },
    {
      "name": "SQLITE_FOREIGN_KEYS",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable SQLite foreign key constraints"
    },
    {
      "name": "SQLITE_JOURNAL_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite journal mode (e.g., WAL, DELETE)"
    },
    {
      "name": "SQLITE_SYNCHRONOUS",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite synchronous mode (e.g., NORMAL, FULL, OFF)"
    },
    {
      "name": "SQLITE_TEMP_STORE",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite temporary storage location (e.g., MEMORY, FILE)"
    },
    {
      "name": "SQLITE_MMAP_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite memory-mapped I/O size in bytes"
    },
    {
      "name": "SQLITE_CACHE_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite cache size (negative value for KB, positive for pages)"
    },
    {
      "name": "SQLITE_PAGE_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite page size in bytes"
    },
    {
      "name": "SQLITE_WAL_AUTOCHECKPOINT",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite WAL autocheckpoint threshold in pages"
    },
    {
      "name": "SQLITE_BUSY_TIMEOUT_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite busy timeout in milliseconds"
    },
    {
      "name": "SQLITE_WAL_CHECKPOINT",
      "isSecret": false,
      "isRequired": false,
      "description": "SQLite WAL checkpoint mode (e.g., PASSIVE, FULL, RESTART)"
    },
    {
      "name": "SHUTDOWN_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Server shutdown timeout in seconds"
    },
    {
      "name": "SHUTDOWN_TIMEOUT_TEST_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Test mode shutdown timeout in seconds"
    },
    {
      "name": "QUEUE_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Queue operation timeout in seconds"
    },
    {
      "name": "QUEUE_TIMEOUT_TEST_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Test mode queue timeout in seconds"
    },
    {
      "name": "CIRCUIT_BREAKER_FAILURE_THRESHOLD",
      "isSecret": false,
      "isRequired": false,
      "description": "Circuit breaker failure threshold before opening"
    },
    {
      "name": "CIRCUIT_BREAKER_RECOVERY_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Circuit breaker recovery timeout in seconds"
    },
    {
      "name": "CIRCUIT_BREAKER_HALF_OPEN_MAX_CALLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum calls allowed in circuit breaker half-open state"
    },
    {
      "name": "POSTGRESQL_CONNECTION_STRING",
      "isSecret": true,
      "isRequired": false,
      "description": "Complete PostgreSQL connection string (overrides individual settings if provided)"
    },
    {
      "name": "POSTGRESQL_HOST",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL server host address"
    },
    {
      "name": "POSTGRESQL_PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL server port number"
    },
    {
      "name": "POSTGRESQL_USER",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL database username"
    },
    {
      "name": "POSTGRESQL_PASSWORD",
      "isSecret": true,
      "isRequired": false,
      "description": "PostgreSQL database password"
    },
    {
      "name": "POSTGRESQL_DATABASE",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL database name"
    },
    {
      "name": "POSTGRESQL_POOL_MIN",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL connection pool minimum size"
    },
    {
      "name": "POSTGRESQL_POOL_MAX",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL connection pool maximum size"
    },
    {
      "name": "POSTGRESQL_POOL_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL connection pool timeout in seconds"
    },
    {
      "name": "POSTGRESQL_COMMAND_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL command execution timeout in seconds"
    },
    {
      "name": "POSTGRESQL_MIGRATION_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Timeout in seconds for PostgreSQL migration operations (default: 300)"
    },
    {
      "name": "POSTGRESQL_MAX_INACTIVE_LIFETIME_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Close idle PostgreSQL connections after this many seconds (0 to disable, default: 300)"
    },
    {
      "name": "POSTGRESQL_MAX_QUERIES",
      "isSecret": false,
      "isRequired": false,
      "description": "Recycle PostgreSQL connections after this many queries (0 to disable, default: 10000)"
    },
    {
      "name": "POSTGRESQL_TCP_KEEPALIVES_IDLE_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Seconds of idle time before sending first TCP keepalive probe (0 to disable, default: 15)"
    },
    {
      "name": "POSTGRESQL_TCP_KEEPALIVES_INTERVAL_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Seconds between subsequent TCP keepalive probes (0 to disable, default: 5)"
    },
    {
      "name": "POSTGRESQL_TCP_KEEPALIVES_COUNT",
      "isSecret": false,
      "isRequired": false,
      "description": "Number of failed TCP keepalive probes before connection is considered dead (0 to disable, default: 3)"
    },
    {
      "name": "POSTGRESQL_STATEMENT_CACHE_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "asyncpg prepared statement cache size. Set to 0 for external pooler compatibility (PgBouncer transaction mode, Pgpool-II, etc.). Default: 100"
    },
    {
      "name": "POSTGRESQL_MAX_CACHED_STATEMENT_LIFETIME_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum lifetime of cached prepared statements in seconds (default: 300). Has no effect when statement_cache_size=0"
    },
    {
      "name": "POSTGRESQL_MAX_CACHEABLE_STATEMENT_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum size of statement to cache in bytes (default: 15360). Has no effect when statement_cache_size=0"
    },
    {
      "name": "POSTGRESQL_SSL_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full)"
    },
    {
      "name": "POSTGRESQL_SCHEMA",
      "isSecret": false,
      "isRequired": false,
      "description": "PostgreSQL schema name for table and index operations (default: public)"
    },
    {
      "name": "ENABLE_SEMANTIC_SEARCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable semantic search functionality"
    },
    {
      "name": "ENABLE_EMBEDDING_GENERATION",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable embedding generation for stored context. Default true - server fails if dependencies not met. Set false to disable embeddings."
    },
    {
      "name": "OLLAMA_HOST",
      "isSecret": false,
      "isRequired": false,
      "description": "Ollama API host URL for embedding generation"
    },
    {
      "name": "OLLAMA_AUTO_PULL",
      "isSecret": false,
      "isRequired": false,
      "description": "Automatically pull missing Ollama models on startup (default: true)"
    },
    {
      "name": "OLLAMA_PULL_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Timeout in seconds for pulling Ollama models (default: 900, range: 30-3600)"
    },
    {
      "name": "EMBEDDING_OLLAMA_TRUNCATE",
      "isSecret": false,
      "isRequired": false,
      "description": "Ollama embedding truncation mode: false (default) returns error when context exceeded, true enables silent truncation"
    },
    {
      "name": "EMBEDDING_OLLAMA_NUM_CTX",
      "isSecret": false,
      "isRequired": false,
      "description": "Ollama embedding context window size in tokens (default: 4096, range: 512-2097152)"
    },
    {
      "name": "EMBEDDING_MODEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Embedding model name for semantic search"
    },
    {
      "name": "EMBEDDING_DIM",
      "isSecret": false,
      "isRequired": false,
      "description": "Embedding vector dimensions"
    },
    {
      "name": "EMBEDDING_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Timeout in seconds for embedding generation API calls"
    },
    {
      "name": "EMBEDDING_RETRY_MAX_ATTEMPTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of retry attempts for embedding generation"
    },
    {
      "name": "EMBEDDING_RETRY_BASE_DELAY_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Base delay in seconds between retry attempts (with exponential backoff)"
    },
    {
      "name": "EMBEDDING_MAX_CONCURRENT",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum concurrent embedding generation operations (default: 3, range: 1-20)"
    },
    {
      "name": "ENABLE_SUMMARY_GENERATION",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable summary generation for stored context. Default true - server fails if dependencies not met. Set false to disable summaries."
    },
    {
      "name": "SUMMARY_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Summary provider: ollama (default), openai, or anthropic"
    },
    {
      "name": "SUMMARY_MODEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Summary generation model name (default: qwen3:0.6b)"
    },
    {
      "name": "SUMMARY_MAX_TOKENS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum output tokens for summary generation (default: 4000, range: 50-16384). Increase if summaries are truncated by reasoning models"
    },
    {
      "name": "SUMMARY_TIMEOUT_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Timeout in seconds for summary generation API calls"
    },
    {
      "name": "SUMMARY_RETRY_MAX_ATTEMPTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum number of retry attempts for summary generation"
    },
    {
      "name": "SUMMARY_RETRY_BASE_DELAY_S",
      "isSecret": false,
      "isRequired": false,
      "description": "Base delay in seconds between retry attempts (with exponential backoff)"
    },
    {
      "name": "SUMMARY_MAX_CONCURRENT",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum concurrent summary generation operations (default: 3, range: 1-20)"
    },
    {
      "name": "SUMMARY_PROMPT",
      "isSecret": false,
      "isRequired": false,
      "description": "Custom summarization prompt. Overrides the built-in default. Used as system message for the LLM."
    },
    {
      "name": "SUMMARY_MIN_CONTENT_LENGTH",
      "isSecret": false,
      "isRequired": false,
      "description": "Minimum text content length in characters to trigger summary generation (default: 500, range: 0-10000). Set to 0 to always generate."
    },
    {
      "name": "SUMMARY_OLLAMA_NUM_CTX",
      "isSecret": false,
      "isRequired": false,
      "description": "Ollama summary context window size in tokens (default: 32768, range: 512-2097152)"
    },
    {
      "name": "SUMMARY_OLLAMA_TRUNCATE",
      "isSecret": false,
      "isRequired": false,
      "description": "Ollama summary truncation mode: false (default) returns error when context exceeded, true enables silent truncation"
    },
    {
      "name": "SUMMARY_OPENAI_REASONING_EFFORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Reasoning effort level for OpenAI reasoning models (default: low). Valid values vary by generation: gpt-5: low, medium, high; gpt-5.1+: none, low, medium, high, xhigh. Default low is universally valid across all generations"
    },
    {
      "name": "SUMMARY_ANTHROPIC_EFFORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Effort level for Anthropic Claude models (default: none). Valid values: max, high, medium, low. Controls inference effort (adaptive thinking)"
    },
    {
      "name": "ANTHROPIC_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Anthropic API key for summary generation"
    },
    {
      "name": "ENABLE_FTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable full-text search functionality"
    },
    {
      "name": "FTS_LANGUAGE",
      "isSecret": false,
      "isRequired": false,
      "description": "Language for FTS stemming (e.g., english, german, french)"
    },
    {
      "name": "FTS_RERANK_WINDOW_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "Characters of context around each FTS match for reranking passage extraction (default: 750)"
    },
    {
      "name": "FTS_RERANK_GAP_MERGE",
      "isSecret": false,
      "isRequired": false,
      "description": "Merge FTS match regions within this character distance (default: 100)"
    },
    {
      "name": "ENABLE_HYBRID_SEARCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable hybrid search combining FTS and semantic search with RRF fusion"
    },
    {
      "name": "HYBRID_RRF_K",
      "isSecret": false,
      "isRequired": false,
      "description": "RRF smoothing constant for hybrid search (default 60)"
    },
    {
      "name": "HYBRID_RRF_OVERFETCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Multiplier for over-fetching results before RRF fusion (default: 2)"
    },
    {
      "name": "HYBRID_FTS_OR_THRESHOLD",
      "isSecret": false,
      "isRequired": false,
      "description": "Minimum significant query terms to switch hybrid FTS from AND to OR logic (default: 4)"
    },
    {
      "name": "SEARCH_DEFAULT_SORT_BY",
      "isSecret": false,
      "isRequired": false,
      "description": "Default sort order for search results: relevance (only 'relevance' supported in current version)"
    },
    {
      "name": "SEARCH_TRUNCATION_LENGTH",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum character length for truncated text_content in search results (default: 300, range: 50-1000)"
    },
    {
      "name": "ENABLE_CHUNKING",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable text chunking for embedding generation (default: true)"
    },
    {
      "name": "CHUNK_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "Target chunk size in characters (default: 1500)"
    },
    {
      "name": "CHUNK_OVERLAP",
      "isSecret": false,
      "isRequired": false,
      "description": "Overlap between chunks in characters (default: 150)"
    },
    {
      "name": "CHUNK_AGGREGATION",
      "isSecret": false,
      "isRequired": false,
      "description": "Chunk score aggregation method: max (only 'max' supported in current version)"
    },
    {
      "name": "CHUNK_DEDUP_OVERFETCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Multiplier for over-fetching chunks before deduplication (default: 5)"
    },
    {
      "name": "ENABLE_RERANKING",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable cross-encoder reranking of search results (default: true)"
    },
    {
      "name": "RERANKING_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Reranking provider (default: flashrank)"
    },
    {
      "name": "RERANKING_MODEL",
      "isSecret": false,
      "isRequired": false,
      "description": "Reranking model name (default: ms-marco-MiniLM-L-12-v2)"
    },
    {
      "name": "RERANKING_MAX_LENGTH",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum input length for reranking in tokens (default: 512)"
    },
    {
      "name": "RERANKING_OVERFETCH",
      "isSecret": false,
      "isRequired": false,
      "description": "Multiplier for over-fetching results before reranking (default: 4)"
    },
    {
      "name": "RERANKING_CACHE_DIR",
      "isSecret": false,
      "isRequired": false,
      "description": "Directory for caching reranking models"
    },
    {
      "name": "RERANKING_CHARS_PER_TOKEN",
      "isSecret": false,
      "isRequired": false,
      "description": "Estimated characters per token for passage size validation (default: 4.0, range: 2.0-8.0)"
    },
    {
      "name": "RERANKING_INTRA_OP_THREADS",
      "isSecret": false,
      "isRequired": false,
      "description": "ONNX Runtime intra-operation parallelism threads for reranking (default: 0 = auto-detect)"
    },
    {
      "name": "RERANKING_CPU_MEM_ARENA",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable ONNX Runtime CPU memory arena for reranking (default: false)"
    },
    {
      "name": "RERANKING_BATCH_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum passages per ONNX Runtime inference batch during reranking (default: 32)"
    },
    {
      "name": "EMBEDDING_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Embedding provider: ollama (default), openai, azure, huggingface, or voyage"
    },
    {
      "name": "OPENAI_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "OpenAI API key for OpenAI embedding provider"
    },
    {
      "name": "OPENAI_API_BASE",
      "isSecret": false,
      "isRequired": false,
      "description": "Custom base URL for OpenAI-compatible APIs"
    },
    {
      "name": "OPENAI_ORGANIZATION",
      "isSecret": false,
      "isRequired": false,
      "description": "OpenAI organization ID"
    },
    {
      "name": "AZURE_OPENAI_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Azure OpenAI API key"
    },
    {
      "name": "AZURE_OPENAI_ENDPOINT",
      "isSecret": false,
      "isRequired": false,
      "description": "Azure OpenAI endpoint URL"
    },
    {
      "name": "AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME",
      "isSecret": false,
      "isRequired": false,
      "description": "Azure OpenAI embedding deployment name"
    },
    {
      "name": "AZURE_OPENAI_API_VERSION",
      "isSecret": false,
      "isRequired": false,
      "description": "Azure OpenAI API version (default: 2024-02-01)"
    },
    {
      "name": "HUGGINGFACEHUB_API_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "HuggingFace Hub API token for HuggingFace embedding provider"
    },
    {
      "name": "VOYAGE_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Voyage AI API key for Voyage embedding provider"
    },
    {
      "name": "VOYAGE_TRUNCATION",
      "isSecret": false,
      "isRequired": false,
      "description": "Voyage AI truncation mode: false (default) returns error when context exceeded, true enables silent truncation"
    },
    {
      "name": "VOYAGE_BATCH_SIZE",
      "isSecret": false,
      "isRequired": false,
      "description": "Voyage AI batch size for embedding requests"
    },
    {
      "name": "LANGSMITH_TRACING",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable LangSmith tracing"
    },
    {
      "name": "LANGSMITH_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "LangSmith API key"
    },
    {
      "name": "LANGSMITH_PROJECT",
      "isSecret": false,
      "isRequired": false,
      "description": "LangSmith project name"
    },
    {
      "name": "LANGSMITH_ENDPOINT",
      "isSecret": false,
      "isRequired": false,
      "description": "LangSmith API endpoint URL"
    },
    {
      "name": "METADATA_INDEXED_FIELDS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated list of metadata fields to index (field:type format)"
    },
    {
      "name": "METADATA_INDEX_SYNC_MODE",
      "isSecret": false,
      "isRequired": false,
      "description": "Index sync mode: strict (fail), auto (sync), warn (log), additive (default, add missing only)"
    },
    {
      "name": "MCP_TRANSPORT",
      "isSecret": false,
      "isRequired": false,
      "description": "Transport mode: stdio for local, http for Docker/remote"
    },
    {
      "name": "FASTMCP_HOST",
      "isSecret": false,
      "isRequired": false,
      "description": "HTTP bind address (use 0.0.0.0 for Docker)"
    },
    {
      "name": "FASTMCP_PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "HTTP port number"
    },
    {
      "name": "FASTMCP_STATELESS_HTTP",
      "isSecret": false,
      "isRequired": false,
      "description": "Enable stateless HTTP mode for horizontal scaling. Enabled by default as the server has no stateful MCP features. Set to false only if you need server-side MCP session tracking."
    },
    {
      "name": "DISABLED_TOOLS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated list of tools to disable (e.g., delete_context,update_context)"
    },
    {
      "name": "MCP_AUTH_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Bearer token for HTTP authentication (required when using SimpleTokenVerifier)"
    },
    {
      "name": "MCP_AUTH_CLIENT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Client ID to assign to authenticated requests"
    },
    {
      "name": "MCP_AUTH_PROVIDER",
      "isSecret": false,
      "isRequired": false,
      "description": "Authentication provider: none (default), simple_token"
    },
    {
      "name": "MCP_SERVER_INSTRUCTIONS",
      "isSecret": false,
      "isRequired": false,
      "description": "Custom server instructions text. Overrides built-in default. Set to empty string to disable."
    }
  ],
  "category": "files-docs",
  "subcategory": "storage",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/alex-feel/mcp-context-server"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "warn",
      "detail": "Asks for 9 secrets: POSTGRESQL_CONNECTION_STRING, POSTGRESQL_PASSWORD, ANTHROPIC_API_KEY, OPENAI_API_KEY, AZURE_OPENAI_API_KEY, HUGGINGFACEHUB_API_TOKEN, VOYAGE_API_KEY, LANGSMITH_API_KEY, MCP_AUTH_TOKEN"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account alex-feel"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "mcp-context-server 2.2.2 has no setup.py; nothing runs at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 260 files in mcp-context-server 2.2.2: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 260 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (pypi)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"mcp-context-server\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"mcp-context-server==2.2.2\"\n      ]\n    }\n  }\n}"
    },
    {
      "label": "Claude Desktop (oci)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"mcp-context-server\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\",\n        \"-i\",\n        \"--rm\",\n        \"ghcr.io/alex-feel/mcp-context-server:2.2.2\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 9,
  "archived": false,
  "pushedAt": "2026-10-28T08:06:00Z",
  "health": {
    "score": 60,
    "parts": {
      "popularity": 0.2853112680644317,
      "activity": 1,
      "issues": null,
      "security": 0.8
    },
    "fail": 0,
    "warn": 1,
    "raw": {
      "stars": 9,
      "forks": 6,
      "downloads": 61,
      "hn": null,
      "issuesOpen": 0,
      "issuesClosed": 0,
      "prsMerged": 135,
      "commits90": 80,
      "release": "2026-03-28T20:05:46Z",
      "pushed": "2026-10-28T08:06:00Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:42:38.200Z"
  }
}
