mcp-context-server
An MCP server that provides persistent multimodal context storage for LLM agents.
The record the registry holds
There is no address to call. This one is a package you install and run yourself, wherever your assistant runs.
{
"server": {
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.alex-feel/mcp-context-server",
"description": "An MCP server that provides persistent multimodal context storage for LLM agents.",
"repository": {
"url": "https://github.com/alex-feel/mcp-context-server",
"source": "github"
},
"version": "2.2.2",
"packages": [
{
"registryType": "pypi",
"registryBaseUrl": "https://pypi.org",
"identifier": "mcp-context-server",
"version": "2.2.2",
"transport": {
"type": "stdio"
},
"environmentVariables": [
{
"description": "Log level",
"format": "string",
"name": "LOG_LEVEL"
},
{
"description": "Storage backend type: sqlite (default) or postgresql",
"format": "string",
"name": "STORAGE_BACKEND"
},
{
"description": "Maximum individual image size in megabytes",
"format": "number",
"name": "MAX_IMAGE_SIZE_MB"
},
{
"description": "Maximum total request size in megabytes",
"format": "number",
"name": "MAX_TOTAL_SIZE_MB"
},
{
"description": "Custom database file location path",
"format": "string",
"name": "DB_PATH"
},
{
"description": "Maximum number of concurrent read connections in the pool",
"format": "number",
"name": "POOL_MAX_READERS"
},
{
"description": "Maximum number of concurrent write connections in the pool",
"format": "number",
"name": "POOL_MAX_WRITERS"
},
{
"description": "Connection timeout in seconds",
"format": "number",
"name": "POOL_CONNECTION_TIMEOUT_S"
},
{
"description": "Idle connection timeout in seconds",
"format": "number",
"name": "POOL_IDLE_TIMEOUT_S"
},
{
"description": "Connection health check interval in seconds",
"format": "number",
"name": "POOL_HEALTH_CHECK_INTERVAL_S"
},
{
"description": "Maximum number of retry attempts for failed operations",
"format": "number",
"name": "RETRY_MAX_RETRIES"
},
{
"description": "Base delay in seconds between retry attempts",
"format": "number",
"name": "RETRY_BASE_DELAY_S"
},
{
"description": "Maximum delay in seconds between retry attempts",
"format": "number",
"name": "RETRY_MAX_DELAY_S"
},
{
"description": "Enable random jitter in retry delays",
"format": "boolean",
"name": "RETRY_JITTER"
},
{
"description": "Exponential backoff multiplication factor for retries",
"format": "number",
"name": "RETRY_BACKOFF_FACTOR"
},
{
"description": "Enable SQLite foreign key constraints",
"format": "boolean",
"name": "SQLITE_FOREIGN_KEYS"
},
{
"description": "SQLite journal mode (e.g., WAL, DELETE)",
"format": "string",
"name": "SQLITE_JOURNAL_MODE"
},
{
"description": "SQLite synchronous mode (e.g., NORMAL, FULL, OFF)",
"format": "string",
"name": "SQLITE_SYNCHRONOUS"
},
{
"description": "SQLite temporary storage location (e.g., MEMORY, FILE)",
"format": "string",
"name": "SQLITE_TEMP_STORE"
},
{
"description": "SQLite memory-mapped I/O size in bytes",
"format": "number",
"name": "SQLITE_MMAP_SIZE"
},
{
"description": "SQLite cache size (negative value for KB, positive for pages)",
"format": "number",
"name": "SQLITE_CACHE_SIZE"
},
{
"description": "SQLite page size in bytes",
"format": "number",
"name": "SQLITE_PAGE_SIZE"
},
{
"description": "SQLite WAL autocheckpoint threshold in pages",
"format": "number",
"name": "SQLITE_WAL_AUTOCHECKPOINT"
},
{
"description": "SQLite busy timeout in milliseconds",
"format": "number",
"name": "SQLITE_BUSY_TIMEOUT_MS"
},
{
"description": "SQLite WAL checkpoint mode (e.g., PASSIVE, FULL, RESTART)",
"format": "string",
"name": "SQLITE_WAL_CHECKPOINT"
},
{
"description": "Server shutdown timeout in seconds",
"format": "number",
"name": "SHUTDOWN_TIMEOUT_S"
},
{
"description": "Test mode shutdown timeout in seconds",
"format": "number",
"name": "SHUTDOWN_TIMEOUT_TEST_S"
},
{
"description": "Queue operation timeout in seconds",
"format": "number",
"name": "QUEUE_TIMEOUT_S"
},
{
"description": "Test mode queue timeout in seconds",
"format": "number",
"name": "QUEUE_TIMEOUT_TEST_S"
},
{
"description": "Circuit breaker failure threshold before opening",
"format": "number",
"name": "CIRCUIT_BREAKER_FAILURE_THRESHOLD"
},
{
"description": "Circuit breaker recovery timeout in seconds",
"format": "number",
"name": "CIRCUIT_BREAKER_RECOVERY_TIMEOUT_S"
},
{
"description": "Maximum calls allowed in circuit breaker half-open state",
"format": "number",
"name": "CIRCUIT_BREAKER_HALF_OPEN_MAX_CALLS"
},
{
"description": "Complete PostgreSQL connection string (overrides individual settings if provided)",
"format": "string",
"isSecret": true,
"name": "POSTGRESQL_CONNECTION_STRING"
},
{
"description": "PostgreSQL server host address",
"format": "string",
"name": "POSTGRESQL_HOST"
},
{
"description": "PostgreSQL server port number",
"format": "number",
"name": "POSTGRESQL_PORT"
},
{
"description": "PostgreSQL database username",
"format": "string",
"name": "POSTGRESQL_USER"
},
{
"description": "PostgreSQL database password",
"format": "string",
"isSecret": true,
"name": "POSTGRESQL_PASSWORD"
},
{
"description": "PostgreSQL database name",
"format": "string",
"name": "POSTGRESQL_DATABASE"
},
{
"description": "PostgreSQL connection pool minimum size",
"format": "number",
"name": "POSTGRESQL_POOL_MIN"
},
{
"description": "PostgreSQL connection pool maximum size",
"format": "number",
"name": "POSTGRESQL_POOL_MAX"
},
{
"description": "PostgreSQL connection pool timeout in seconds",
"format": "number",
"name": "POSTGRESQL_POOL_TIMEOUT_S"
},
{
"description": "PostgreSQL command execution timeout in seconds",
"format": "number",
"name": "POSTGRESQL_COMMAND_TIMEOUT_S"
},
{
"description": "Timeout in seconds for PostgreSQL migration operations (default: 300)",
"format": "number",
"name": "POSTGRESQL_MIGRATION_TIMEOUT_S"
},
{
"description": "Close idle PostgreSQL connections after this many seconds (0 to disable, default: 300)",
"format": "number",
"name": "POSTGRESQL_MAX_INACTIVE_LIFETIME_S"
},
{
"description": "Recycle PostgreSQL connections after this many queries (0 to disable, default: 10000)",
"format": "number",
"name": "POSTGRESQL_MAX_QUERIES"
},
{
"description": "Seconds of idle time before sending first TCP keepalive probe (0 to disable, default: 15)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_IDLE_S"
},
{
"description": "Seconds between subsequent TCP keepalive probes (0 to disable, default: 5)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_INTERVAL_S"
},
{
"description": "Number of failed TCP keepalive probes before connection is considered dead (0 to disable, default: 3)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_COUNT"
},
{
"description": "asyncpg prepared statement cache size. Set to 0 for external pooler compatibility (PgBouncer transaction mode, Pgpool-II, etc.). Default: 100",
"format": "number",
"name": "POSTGRESQL_STATEMENT_CACHE_SIZE"
},
{
"description": "Maximum lifetime of cached prepared statements in seconds (default: 300). Has no effect when statement_cache_size=0",
"format": "number",
"name": "POSTGRESQL_MAX_CACHED_STATEMENT_LIFETIME_S"
},
{
"description": "Maximum size of statement to cache in bytes (default: 15360). Has no effect when statement_cache_size=0",
"format": "number",
"name": "POSTGRESQL_MAX_CACHEABLE_STATEMENT_SIZE"
},
{
"description": "PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full)",
"format": "string",
"name": "POSTGRESQL_SSL_MODE"
},
{
"description": "PostgreSQL schema name for table and index operations (default: public)",
"format": "string",
"name": "POSTGRESQL_SCHEMA"
},
{
"description": "Enable semantic search functionality",
"format": "boolean",
"name": "ENABLE_SEMANTIC_SEARCH"
},
{
"description": "Enable embedding generation for stored context. Default true - server fails if dependencies not met. Set false to disable embeddings.",
"format": "boolean",
"name": "ENABLE_EMBEDDING_GENERATION"
},
{
"description": "Ollama API host URL for embedding generation",
"format": "string",
"name": "OLLAMA_HOST"
},
{
"description": "Automatically pull missing Ollama models on startup (default: true)",
"format": "boolean",
"name": "OLLAMA_AUTO_PULL"
},
{
"description": "Timeout in seconds for pulling Ollama models (default: 900, range: 30-3600)",
"format": "number",
"name": "OLLAMA_PULL_TIMEOUT_S"
},
{
"description": "Ollama embedding truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "EMBEDDING_OLLAMA_TRUNCATE"
},
{
"description": "Ollama embedding context window size in tokens (default: 4096, range: 512-2097152)",
"format": "number",
"name": "EMBEDDING_OLLAMA_NUM_CTX"
},
{
"description": "Embedding model name for semantic search",
"format": "string",
"name": "EMBEDDING_MODEL"
},
{
"description": "Embedding vector dimensions",
"format": "number",
"name": "EMBEDDING_DIM"
},
{
"description": "Timeout in seconds for embedding generation API calls",
"format": "number",
"name": "EMBEDDING_TIMEOUT_S"
},
{
"description": "Maximum number of retry attempts for embedding generation",
"format": "number",
"name": "EMBEDDING_RETRY_MAX_ATTEMPTS"
},
{
"description": "Base delay in seconds between retry attempts (with exponential backoff)",
"format": "number",
"name": "EMBEDDING_RETRY_BASE_DELAY_S"
},
{
"description": "Maximum concurrent embedding generation operations (default: 3, range: 1-20)",
"format": "number",
"name": "EMBEDDING_MAX_CONCURRENT"
},
{
"description": "Enable summary generation for stored context. Default true - server fails if dependencies not met. Set false to disable summaries.",
"format": "boolean",
"name": "ENABLE_SUMMARY_GENERATION"
},
{
"description": "Summary provider: ollama (default), openai, or anthropic",
"format": "string",
"name": "SUMMARY_PROVIDER"
},
{
"description": "Summary generation model name (default: qwen3:0.6b)",
"format": "string",
"name": "SUMMARY_MODEL"
},
{
"description": "Maximum output tokens for summary generation (default: 4000, range: 50-16384). Increase if summaries are truncated by reasoning models",
"format": "number",
"name": "SUMMARY_MAX_TOKENS"
},
{
"description": "Timeout in seconds for summary generation API calls",
"format": "number",
"name": "SUMMARY_TIMEOUT_S"
},
{
"description": "Maximum number of retry attempts for summary generation",
"format": "number",
"name": "SUMMARY_RETRY_MAX_ATTEMPTS"
},
{
"description": "Base delay in seconds between retry attempts (with exponential backoff)",
"format": "number",
"name": "SUMMARY_RETRY_BASE_DELAY_S"
},
{
"description": "Maximum concurrent summary generation operations (default: 3, range: 1-20)",
"format": "number",
"name": "SUMMARY_MAX_CONCURRENT"
},
{
"description": "Custom summarization prompt. Overrides the built-in default. Used as system message for the LLM.",
"format": "string",
"name": "SUMMARY_PROMPT"
},
{
"description": "Minimum text content length in characters to trigger summary generation (default: 500, range: 0-10000). Set to 0 to always generate.",
"format": "number",
"name": "SUMMARY_MIN_CONTENT_LENGTH"
},
{
"description": "Ollama summary context window size in tokens (default: 32768, range: 512-2097152)",
"format": "number",
"name": "SUMMARY_OLLAMA_NUM_CTX"
},
{
"description": "Ollama summary truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "SUMMARY_OLLAMA_TRUNCATE"
},
{
"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",
"format": "string",
"name": "SUMMARY_OPENAI_REASONING_EFFORT"
},
{
"description": "Effort level for Anthropic Claude models (default: none). Valid values: max, high, medium, low. Controls inference effort (adaptive thinking)",
"format": "string",
"name": "SUMMARY_ANTHROPIC_EFFORT"
},
{
"description": "Anthropic API key for summary generation",
"format": "string",
"isSecret": true,
"name": "ANTHROPIC_API_KEY"
},
{
"description": "Enable full-text search functionality",
"format": "boolean",
"name": "ENABLE_FTS"
},
{
"description": "Language for FTS stemming (e.g., english, german, french)",
"format": "string",
"name": "FTS_LANGUAGE"
},
{
"description": "Characters of context around each FTS match for reranking passage extraction (default: 750)",
"format": "number",
"name": "FTS_RERANK_WINDOW_SIZE"
},
{
"description": "Merge FTS match regions within this character distance (default: 100)",
"format": "number",
"name": "FTS_RERANK_GAP_MERGE"
},
{
"description": "Enable hybrid search combining FTS and semantic search with RRF fusion",
"format": "boolean",
"name": "ENABLE_HYBRID_SEARCH"
},
{
"description": "RRF smoothing constant for hybrid search (default 60)",
"format": "number",
"name": "HYBRID_RRF_K"
},
{
"description": "Multiplier for over-fetching results before RRF fusion (default: 2)",
"format": "number",
"name": "HYBRID_RRF_OVERFETCH"
},
{
"description": "Minimum significant query terms to switch hybrid FTS from AND to OR logic (default: 4)",
"format": "number",
"name": "HYBRID_FTS_OR_THRESHOLD"
},
{
"description": "Default sort order for search results: relevance (only 'relevance' supported in current version)",
"format": "string",
"name": "SEARCH_DEFAULT_SORT_BY"
},
{
"description": "Maximum character length for truncated text_content in search results (default: 300, range: 50-1000)",
"format": "number",
"name": "SEARCH_TRUNCATION_LENGTH"
},
{
"description": "Enable text chunking for embedding generation (default: true)",
"format": "boolean",
"name": "ENABLE_CHUNKING"
},
{
"description": "Target chunk size in characters (default: 1500)",
"format": "number",
"name": "CHUNK_SIZE"
},
{
"description": "Overlap between chunks in characters (default: 150)",
"format": "number",
"name": "CHUNK_OVERLAP"
},
{
"description": "Chunk score aggregation method: max (only 'max' supported in current version)",
"format": "string",
"name": "CHUNK_AGGREGATION"
},
{
"description": "Multiplier for over-fetching chunks before deduplication (default: 5)",
"format": "number",
"name": "CHUNK_DEDUP_OVERFETCH"
},
{
"description": "Enable cross-encoder reranking of search results (default: true)",
"format": "boolean",
"name": "ENABLE_RERANKING"
},
{
"description": "Reranking provider (default: flashrank)",
"format": "string",
"name": "RERANKING_PROVIDER"
},
{
"description": "Reranking model name (default: ms-marco-MiniLM-L-12-v2)",
"format": "string",
"name": "RERANKING_MODEL"
},
{
"description": "Maximum input length for reranking in tokens (default: 512)",
"format": "number",
"name": "RERANKING_MAX_LENGTH"
},
{
"description": "Multiplier for over-fetching results before reranking (default: 4)",
"format": "number",
"name": "RERANKING_OVERFETCH"
},
{
"description": "Directory for caching reranking models",
"format": "string",
"name": "RERANKING_CACHE_DIR"
},
{
"description": "Estimated characters per token for passage size validation (default: 4.0, range: 2.0-8.0)",
"format": "number",
"name": "RERANKING_CHARS_PER_TOKEN"
},
{
"description": "ONNX Runtime intra-operation parallelism threads for reranking (default: 0 = auto-detect)",
"format": "number",
"name": "RERANKING_INTRA_OP_THREADS"
},
{
"description": "Enable ONNX Runtime CPU memory arena for reranking (default: false)",
"format": "boolean",
"name": "RERANKING_CPU_MEM_ARENA"
},
{
"description": "Maximum passages per ONNX Runtime inference batch during reranking (default: 32)",
"format": "number",
"name": "RERANKING_BATCH_SIZE"
},
{
"description": "Embedding provider: ollama (default), openai, azure, huggingface, or voyage",
"format": "string",
"name": "EMBEDDING_PROVIDER"
},
{
"description": "OpenAI API key for OpenAI embedding provider",
"format": "string",
"isSecret": true,
"name": "OPENAI_API_KEY"
},
{
"description": "Custom base URL for OpenAI-compatible APIs",
"format": "string",
"name": "OPENAI_API_BASE"
},
{
"description": "OpenAI organization ID",
"format": "string",
"name": "OPENAI_ORGANIZATION"
},
{
"description": "Azure OpenAI API key",
"format": "string",
"isSecret": true,
"name": "AZURE_OPENAI_API_KEY"
},
{
"description": "Azure OpenAI endpoint URL",
"format": "string",
"name": "AZURE_OPENAI_ENDPOINT"
},
{
"description": "Azure OpenAI embedding deployment name",
"format": "string",
"name": "AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME"
},
{
"description": "Azure OpenAI API version (default: 2024-02-01)",
"format": "string",
"name": "AZURE_OPENAI_API_VERSION"
},
{
"description": "HuggingFace Hub API token for HuggingFace embedding provider",
"format": "string",
"isSecret": true,
"name": "HUGGINGFACEHUB_API_TOKEN"
},
{
"description": "Voyage AI API key for Voyage embedding provider",
"format": "string",
"isSecret": true,
"name": "VOYAGE_API_KEY"
},
{
"description": "Voyage AI truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "VOYAGE_TRUNCATION"
},
{
"description": "Voyage AI batch size for embedding requests",
"format": "number",
"name": "VOYAGE_BATCH_SIZE"
},
{
"description": "Enable LangSmith tracing",
"format": "boolean",
"name": "LANGSMITH_TRACING"
},
{
"description": "LangSmith API key",
"format": "string",
"isSecret": true,
"name": "LANGSMITH_API_KEY"
},
{
"description": "LangSmith project name",
"format": "string",
"name": "LANGSMITH_PROJECT"
},
{
"description": "LangSmith API endpoint URL",
"format": "string",
"name": "LANGSMITH_ENDPOINT"
},
{
"description": "Comma-separated list of metadata fields to index (field:type format)",
"format": "string",
"name": "METADATA_INDEXED_FIELDS"
},
{
"description": "Index sync mode: strict (fail), auto (sync), warn (log), additive (default, add missing only)",
"format": "string",
"name": "METADATA_INDEX_SYNC_MODE"
},
{
"description": "Transport mode: stdio for local, http for Docker/remote",
"format": "string",
"name": "MCP_TRANSPORT"
},
{
"description": "HTTP bind address (use 0.0.0.0 for Docker)",
"format": "string",
"name": "FASTMCP_HOST"
},
{
"description": "HTTP port number",
"format": "number",
"name": "FASTMCP_PORT"
},
{
"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.",
"format": "boolean",
"name": "FASTMCP_STATELESS_HTTP"
},
{
"description": "Comma-separated list of tools to disable (e.g., delete_context,update_context)",
"format": "string",
"name": "DISABLED_TOOLS"
},
{
"description": "Bearer token for HTTP authentication (required when using SimpleTokenVerifier)",
"format": "string",
"isSecret": true,
"name": "MCP_AUTH_TOKEN"
},
{
"description": "Client ID to assign to authenticated requests",
"format": "string",
"name": "MCP_AUTH_CLIENT_ID"
},
{
"description": "Authentication provider: none (default), simple_token",
"format": "string",
"name": "MCP_AUTH_PROVIDER"
},
{
"description": "Custom server instructions text. Overrides built-in default. Set to empty string to disable.",
"format": "string",
"name": "MCP_SERVER_INSTRUCTIONS"
}
]
},
{
"registryType": "oci",
"identifier": "ghcr.io/alex-feel/mcp-context-server:2.2.2",
"runtimeHint": "docker",
"transport": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp"
},
"environmentVariables": [
{
"description": "Log level",
"format": "string",
"name": "LOG_LEVEL"
},
{
"description": "Storage backend type: sqlite (default) or postgresql",
"format": "string",
"name": "STORAGE_BACKEND"
},
{
"description": "Maximum individual image size in megabytes",
"format": "number",
"name": "MAX_IMAGE_SIZE_MB"
},
{
"description": "Maximum total request size in megabytes",
"format": "number",
"name": "MAX_TOTAL_SIZE_MB"
},
{
"description": "Custom database file location path",
"format": "string",
"name": "DB_PATH"
},
{
"description": "Maximum number of concurrent read connections in the pool",
"format": "number",
"name": "POOL_MAX_READERS"
},
{
"description": "Maximum number of concurrent write connections in the pool",
"format": "number",
"name": "POOL_MAX_WRITERS"
},
{
"description": "Connection timeout in seconds",
"format": "number",
"name": "POOL_CONNECTION_TIMEOUT_S"
},
{
"description": "Idle connection timeout in seconds",
"format": "number",
"name": "POOL_IDLE_TIMEOUT_S"
},
{
"description": "Connection health check interval in seconds",
"format": "number",
"name": "POOL_HEALTH_CHECK_INTERVAL_S"
},
{
"description": "Maximum number of retry attempts for failed operations",
"format": "number",
"name": "RETRY_MAX_RETRIES"
},
{
"description": "Base delay in seconds between retry attempts",
"format": "number",
"name": "RETRY_BASE_DELAY_S"
},
{
"description": "Maximum delay in seconds between retry attempts",
"format": "number",
"name": "RETRY_MAX_DELAY_S"
},
{
"description": "Enable random jitter in retry delays",
"format": "boolean",
"name": "RETRY_JITTER"
},
{
"description": "Exponential backoff multiplication factor for retries",
"format": "number",
"name": "RETRY_BACKOFF_FACTOR"
},
{
"description": "Enable SQLite foreign key constraints",
"format": "boolean",
"name": "SQLITE_FOREIGN_KEYS"
},
{
"description": "SQLite journal mode (e.g., WAL, DELETE)",
"format": "string",
"name": "SQLITE_JOURNAL_MODE"
},
{
"description": "SQLite synchronous mode (e.g., NORMAL, FULL, OFF)",
"format": "string",
"name": "SQLITE_SYNCHRONOUS"
},
{
"description": "SQLite temporary storage location (e.g., MEMORY, FILE)",
"format": "string",
"name": "SQLITE_TEMP_STORE"
},
{
"description": "SQLite memory-mapped I/O size in bytes",
"format": "number",
"name": "SQLITE_MMAP_SIZE"
},
{
"description": "SQLite cache size (negative value for KB, positive for pages)",
"format": "number",
"name": "SQLITE_CACHE_SIZE"
},
{
"description": "SQLite page size in bytes",
"format": "number",
"name": "SQLITE_PAGE_SIZE"
},
{
"description": "SQLite WAL autocheckpoint threshold in pages",
"format": "number",
"name": "SQLITE_WAL_AUTOCHECKPOINT"
},
{
"description": "SQLite busy timeout in milliseconds",
"format": "number",
"name": "SQLITE_BUSY_TIMEOUT_MS"
},
{
"description": "SQLite WAL checkpoint mode (e.g., PASSIVE, FULL, RESTART)",
"format": "string",
"name": "SQLITE_WAL_CHECKPOINT"
},
{
"description": "Server shutdown timeout in seconds",
"format": "number",
"name": "SHUTDOWN_TIMEOUT_S"
},
{
"description": "Test mode shutdown timeout in seconds",
"format": "number",
"name": "SHUTDOWN_TIMEOUT_TEST_S"
},
{
"description": "Queue operation timeout in seconds",
"format": "number",
"name": "QUEUE_TIMEOUT_S"
},
{
"description": "Test mode queue timeout in seconds",
"format": "number",
"name": "QUEUE_TIMEOUT_TEST_S"
},
{
"description": "Circuit breaker failure threshold before opening",
"format": "number",
"name": "CIRCUIT_BREAKER_FAILURE_THRESHOLD"
},
{
"description": "Circuit breaker recovery timeout in seconds",
"format": "number",
"name": "CIRCUIT_BREAKER_RECOVERY_TIMEOUT_S"
},
{
"description": "Maximum calls allowed in circuit breaker half-open state",
"format": "number",
"name": "CIRCUIT_BREAKER_HALF_OPEN_MAX_CALLS"
},
{
"description": "Complete PostgreSQL connection string (overrides individual settings if provided)",
"format": "string",
"isSecret": true,
"name": "POSTGRESQL_CONNECTION_STRING"
},
{
"description": "PostgreSQL server host address",
"format": "string",
"name": "POSTGRESQL_HOST"
},
{
"description": "PostgreSQL server port number",
"format": "number",
"name": "POSTGRESQL_PORT"
},
{
"description": "PostgreSQL database username",
"format": "string",
"name": "POSTGRESQL_USER"
},
{
"description": "PostgreSQL database password",
"format": "string",
"isSecret": true,
"name": "POSTGRESQL_PASSWORD"
},
{
"description": "PostgreSQL database name",
"format": "string",
"name": "POSTGRESQL_DATABASE"
},
{
"description": "PostgreSQL connection pool minimum size",
"format": "number",
"name": "POSTGRESQL_POOL_MIN"
},
{
"description": "PostgreSQL connection pool maximum size",
"format": "number",
"name": "POSTGRESQL_POOL_MAX"
},
{
"description": "PostgreSQL connection pool timeout in seconds",
"format": "number",
"name": "POSTGRESQL_POOL_TIMEOUT_S"
},
{
"description": "PostgreSQL command execution timeout in seconds",
"format": "number",
"name": "POSTGRESQL_COMMAND_TIMEOUT_S"
},
{
"description": "Timeout in seconds for PostgreSQL migration operations (default: 300)",
"format": "number",
"name": "POSTGRESQL_MIGRATION_TIMEOUT_S"
},
{
"description": "Close idle PostgreSQL connections after this many seconds (0 to disable, default: 300)",
"format": "number",
"name": "POSTGRESQL_MAX_INACTIVE_LIFETIME_S"
},
{
"description": "Recycle PostgreSQL connections after this many queries (0 to disable, default: 10000)",
"format": "number",
"name": "POSTGRESQL_MAX_QUERIES"
},
{
"description": "Seconds of idle time before sending first TCP keepalive probe (0 to disable, default: 15)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_IDLE_S"
},
{
"description": "Seconds between subsequent TCP keepalive probes (0 to disable, default: 5)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_INTERVAL_S"
},
{
"description": "Number of failed TCP keepalive probes before connection is considered dead (0 to disable, default: 3)",
"format": "number",
"name": "POSTGRESQL_TCP_KEEPALIVES_COUNT"
},
{
"description": "asyncpg prepared statement cache size. Set to 0 for external pooler compatibility (PgBouncer transaction mode, Pgpool-II, etc.). Default: 100",
"format": "number",
"name": "POSTGRESQL_STATEMENT_CACHE_SIZE"
},
{
"description": "Maximum lifetime of cached prepared statements in seconds (default: 300). Has no effect when statement_cache_size=0",
"format": "number",
"name": "POSTGRESQL_MAX_CACHED_STATEMENT_LIFETIME_S"
},
{
"description": "Maximum size of statement to cache in bytes (default: 15360). Has no effect when statement_cache_size=0",
"format": "number",
"name": "POSTGRESQL_MAX_CACHEABLE_STATEMENT_SIZE"
},
{
"description": "PostgreSQL SSL mode (disable, allow, prefer, require, verify-ca, verify-full)",
"format": "string",
"name": "POSTGRESQL_SSL_MODE"
},
{
"description": "PostgreSQL schema name for table and index operations (default: public)",
"format": "string",
"name": "POSTGRESQL_SCHEMA"
},
{
"description": "Enable semantic search functionality",
"format": "boolean",
"name": "ENABLE_SEMANTIC_SEARCH"
},
{
"description": "Enable embedding generation for stored context. Default true - server fails if dependencies not met. Set false to disable embeddings.",
"format": "boolean",
"name": "ENABLE_EMBEDDING_GENERATION"
},
{
"description": "Ollama API host URL for embedding generation",
"format": "string",
"name": "OLLAMA_HOST"
},
{
"description": "Automatically pull missing Ollama models on startup (default: true)",
"format": "boolean",
"name": "OLLAMA_AUTO_PULL"
},
{
"description": "Timeout in seconds for pulling Ollama models (default: 900, range: 30-3600)",
"format": "number",
"name": "OLLAMA_PULL_TIMEOUT_S"
},
{
"description": "Ollama embedding truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "EMBEDDING_OLLAMA_TRUNCATE"
},
{
"description": "Ollama embedding context window size in tokens (default: 4096, range: 512-2097152)",
"format": "number",
"name": "EMBEDDING_OLLAMA_NUM_CTX"
},
{
"description": "Embedding model name for semantic search",
"format": "string",
"name": "EMBEDDING_MODEL"
},
{
"description": "Embedding vector dimensions",
"format": "number",
"name": "EMBEDDING_DIM"
},
{
"description": "Timeout in seconds for embedding generation API calls",
"format": "number",
"name": "EMBEDDING_TIMEOUT_S"
},
{
"description": "Maximum number of retry attempts for embedding generation",
"format": "number",
"name": "EMBEDDING_RETRY_MAX_ATTEMPTS"
},
{
"description": "Base delay in seconds between retry attempts (with exponential backoff)",
"format": "number",
"name": "EMBEDDING_RETRY_BASE_DELAY_S"
},
{
"description": "Maximum concurrent embedding generation operations (default: 3, range: 1-20)",
"format": "number",
"name": "EMBEDDING_MAX_CONCURRENT"
},
{
"description": "Enable summary generation for stored context. Default true - server fails if dependencies not met. Set false to disable summaries.",
"format": "boolean",
"name": "ENABLE_SUMMARY_GENERATION"
},
{
"description": "Summary provider: ollama (default), openai, or anthropic",
"format": "string",
"name": "SUMMARY_PROVIDER"
},
{
"description": "Summary generation model name (default: qwen3:0.6b)",
"format": "string",
"name": "SUMMARY_MODEL"
},
{
"description": "Maximum output tokens for summary generation (default: 4000, range: 50-16384). Increase if summaries are truncated by reasoning models",
"format": "number",
"name": "SUMMARY_MAX_TOKENS"
},
{
"description": "Timeout in seconds for summary generation API calls",
"format": "number",
"name": "SUMMARY_TIMEOUT_S"
},
{
"description": "Maximum number of retry attempts for summary generation",
"format": "number",
"name": "SUMMARY_RETRY_MAX_ATTEMPTS"
},
{
"description": "Base delay in seconds between retry attempts (with exponential backoff)",
"format": "number",
"name": "SUMMARY_RETRY_BASE_DELAY_S"
},
{
"description": "Maximum concurrent summary generation operations (default: 3, range: 1-20)",
"format": "number",
"name": "SUMMARY_MAX_CONCURRENT"
},
{
"description": "Custom summarization prompt. Overrides the built-in default. Used as system message for the LLM.",
"format": "string",
"name": "SUMMARY_PROMPT"
},
{
"description": "Minimum text content length in characters to trigger summary generation (default: 500, range: 0-10000). Set to 0 to always generate.",
"format": "number",
"name": "SUMMARY_MIN_CONTENT_LENGTH"
},
{
"description": "Ollama summary context window size in tokens (default: 32768, range: 512-2097152)",
"format": "number",
"name": "SUMMARY_OLLAMA_NUM_CTX"
},
{
"description": "Ollama summary truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "SUMMARY_OLLAMA_TRUNCATE"
},
{
"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",
"format": "string",
"name": "SUMMARY_OPENAI_REASONING_EFFORT"
},
{
"description": "Effort level for Anthropic Claude models (default: none). Valid values: max, high, medium, low. Controls inference effort (adaptive thinking)",
"format": "string",
"name": "SUMMARY_ANTHROPIC_EFFORT"
},
{
"description": "Anthropic API key for summary generation",
"format": "string",
"isSecret": true,
"name": "ANTHROPIC_API_KEY"
},
{
"description": "Enable full-text search functionality",
"format": "boolean",
"name": "ENABLE_FTS"
},
{
"description": "Language for FTS stemming (e.g., english, german, french)",
"format": "string",
"name": "FTS_LANGUAGE"
},
{
"description": "Characters of context around each FTS match for reranking passage extraction (default: 750)",
"format": "number",
"name": "FTS_RERANK_WINDOW_SIZE"
},
{
"description": "Merge FTS match regions within this character distance (default: 100)",
"format": "number",
"name": "FTS_RERANK_GAP_MERGE"
},
{
"description": "Enable hybrid search combining FTS and semantic search with RRF fusion",
"format": "boolean",
"name": "ENABLE_HYBRID_SEARCH"
},
{
"description": "RRF smoothing constant for hybrid search (default 60)",
"format": "number",
"name": "HYBRID_RRF_K"
},
{
"description": "Multiplier for over-fetching results before RRF fusion (default: 2)",
"format": "number",
"name": "HYBRID_RRF_OVERFETCH"
},
{
"description": "Minimum significant query terms to switch hybrid FTS from AND to OR logic (default: 4)",
"format": "number",
"name": "HYBRID_FTS_OR_THRESHOLD"
},
{
"description": "Default sort order for search results: relevance (only 'relevance' supported in current version)",
"format": "string",
"name": "SEARCH_DEFAULT_SORT_BY"
},
{
"description": "Maximum character length for truncated text_content in search results (default: 300, range: 50-1000)",
"format": "number",
"name": "SEARCH_TRUNCATION_LENGTH"
},
{
"description": "Enable text chunking for embedding generation (default: true)",
"format": "boolean",
"name": "ENABLE_CHUNKING"
},
{
"description": "Target chunk size in characters (default: 1500)",
"format": "number",
"name": "CHUNK_SIZE"
},
{
"description": "Overlap between chunks in characters (default: 150)",
"format": "number",
"name": "CHUNK_OVERLAP"
},
{
"description": "Chunk score aggregation method: max (only 'max' supported in current version)",
"format": "string",
"name": "CHUNK_AGGREGATION"
},
{
"description": "Multiplier for over-fetching chunks before deduplication (default: 5)",
"format": "number",
"name": "CHUNK_DEDUP_OVERFETCH"
},
{
"description": "Enable cross-encoder reranking of search results (default: true)",
"format": "boolean",
"name": "ENABLE_RERANKING"
},
{
"description": "Reranking provider (default: flashrank)",
"format": "string",
"name": "RERANKING_PROVIDER"
},
{
"description": "Reranking model name (default: ms-marco-MiniLM-L-12-v2)",
"format": "string",
"name": "RERANKING_MODEL"
},
{
"description": "Maximum input length for reranking in tokens (default: 512)",
"format": "number",
"name": "RERANKING_MAX_LENGTH"
},
{
"description": "Multiplier for over-fetching results before reranking (default: 4)",
"format": "number",
"name": "RERANKING_OVERFETCH"
},
{
"description": "Directory for caching reranking models",
"format": "string",
"name": "RERANKING_CACHE_DIR"
},
{
"description": "Estimated characters per token for passage size validation (default: 4.0, range: 2.0-8.0)",
"format": "number",
"name": "RERANKING_CHARS_PER_TOKEN"
},
{
"description": "ONNX Runtime intra-operation parallelism threads for reranking (default: 0 = auto-detect)",
"format": "number",
"name": "RERANKING_INTRA_OP_THREADS"
},
{
"description": "Enable ONNX Runtime CPU memory arena for reranking (default: false)",
"format": "boolean",
"name": "RERANKING_CPU_MEM_ARENA"
},
{
"description": "Maximum passages per ONNX Runtime inference batch during reranking (default: 32)",
"format": "number",
"name": "RERANKING_BATCH_SIZE"
},
{
"description": "Embedding provider: ollama (default), openai, azure, huggingface, or voyage",
"format": "string",
"name": "EMBEDDING_PROVIDER"
},
{
"description": "OpenAI API key for OpenAI embedding provider",
"format": "string",
"isSecret": true,
"name": "OPENAI_API_KEY"
},
{
"description": "Custom base URL for OpenAI-compatible APIs",
"format": "string",
"name": "OPENAI_API_BASE"
},
{
"description": "OpenAI organization ID",
"format": "string",
"name": "OPENAI_ORGANIZATION"
},
{
"description": "Azure OpenAI API key",
"format": "string",
"isSecret": true,
"name": "AZURE_OPENAI_API_KEY"
},
{
"description": "Azure OpenAI endpoint URL",
"format": "string",
"name": "AZURE_OPENAI_ENDPOINT"
},
{
"description": "Azure OpenAI embedding deployment name",
"format": "string",
"name": "AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME"
},
{
"description": "Azure OpenAI API version (default: 2024-02-01)",
"format": "string",
"name": "AZURE_OPENAI_API_VERSION"
},
{
"description": "HuggingFace Hub API token for HuggingFace embedding provider",
"format": "string",
"isSecret": true,
"name": "HUGGINGFACEHUB_API_TOKEN"
},
{
"description": "Voyage AI API key for Voyage embedding provider",
"format": "string",
"isSecret": true,
"name": "VOYAGE_API_KEY"
},
{
"description": "Voyage AI truncation mode: false (default) returns error when context exceeded, true enables silent truncation",
"format": "boolean",
"name": "VOYAGE_TRUNCATION"
},
{
"description": "Voyage AI batch size for embedding requests",
"format": "number",
"name": "VOYAGE_BATCH_SIZE"
},
{
"description": "Enable LangSmith tracing",
"format": "boolean",
"name": "LANGSMITH_TRACING"
},
{
"description": "LangSmith API key",
"format": "string",
"isSecret": true,
"name": "LANGSMITH_API_KEY"
},
{
"description": "LangSmith project name",
"format": "string",
"name": "LANGSMITH_PROJECT"
},
{
"description": "LangSmith API endpoint URL",
"format": "string",
"name": "LANGSMITH_ENDPOINT"
},
{
"description": "Comma-separated list of metadata fields to index (field:type format)",
"format": "string",
"name": "METADATA_INDEXED_FIELDS"
},
{
"description": "Index sync mode: strict (fail), auto (sync), warn (log), additive (default, add missing only)",
"format": "string",
"name": "METADATA_INDEX_SYNC_MODE"
},
{
"description": "Transport mode: stdio for local, http for Docker/remote",
"format": "string",
"name": "MCP_TRANSPORT"
},
{
"description": "HTTP bind address (use 0.0.0.0 for Docker)",
"format": "string",
"name": "FASTMCP_HOST"
},
{
"description": "HTTP port number",
"format": "number",
"name": "FASTMCP_PORT"
},
{
"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.",
"format": "boolean",
"name": "FASTMCP_STATELESS_HTTP"
},
{
"description": "Comma-separated list of tools to disable (e.g., delete_context,update_context)",
"format": "string",
"name": "DISABLED_TOOLS"
},
{
"description": "Bearer token for HTTP authentication (required when using SimpleTokenVerifier)",
"format": "string",
"isSecret": true,
"name": "MCP_AUTH_TOKEN"
},
{
"description": "Client ID to assign to authenticated requests",
"format": "string",
"name": "MCP_AUTH_CLIENT_ID"
},
{
"description": "Authentication provider: none (default), simple_token",
"format": "string",
"name": "MCP_AUTH_PROVIDER"
},
{
"description": "Custom server instructions text. Overrides built-in default. Set to empty string to disable.",
"format": "string",
"name": "MCP_SERVER_INSTRUCTIONS"
}
]
}
]
},
"_meta": {
"io.modelcontextprotocol.registry/official": {
"status": "active",
"statusChangedAt": "2026-03-28T20:10:19.188244Z",
"publishedAt": "2026-03-28T20:10:19.188244Z",
"updatedAt": "2026-03-28T20:10:19.188244Z",
"isLatest": true
}
}
}
Draft an Agent Plugin from this
An MCP server is raw capability: some tools, wired to something. An Agent Plugin is the packaging that says what job it does, what it leaves behind and where it stops. The prompt below carries this record and asks for the packaging; your own assistant writes it, and nothing here is sent anywhere.
MCP server
These are the publisher's own words, filed by them with the official MCP registry and mirrored here. This catalog did not read them from the publisher and has not run, called or installed anything.
The publisher's own address
https://github.com/alex-feel/mcp-context-server
The address the publisher put in their registry record, printed as they wrote it. Nobody here has opened it.