| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| [PYFUN_FILE = .pyfun] |
|
|
| |
| |
| |
| |
| |
| |
| [HUB] |
| HUB_NAME = "Multi-LLM-API-Gateway" |
| HUB_VERSION = "1.0.1" |
| HUB_DESCRIPTION = "Universal Hub built on PyFundaments" |
|
|
| |
| HUB_TRANSPORT = "streamable-http" |
|
|
| |
| |
| HUB_STATELESS = "true" |
|
|
| HUB_HOST = "0.0.0.0" |
| HUB_PORT = "7860" |
| HUB_MODE = "mcp" |
| HUB_SPACE_URL = "" |
| [HUB_END] |
|
|
| |
| |
| |
| [HUB_LIMITS] |
| MAX_PARALLEL_REQUESTS = "5" |
| RETRY_COUNT = "3" |
| RETRY_DELAY_SEC = "2" |
| REQUEST_TIMEOUT_SEC = "60" |
| SEARCH_TIMEOUT_SEC = "30" |
| [HUB_LIMITS_END] |
|
|
| |
| |
| |
| |
| [PROVIDERS] |
|
|
| |
| [LLM_PROVIDERS] |
|
|
|
|
| |
| [LLM_PROVIDER.smollm] |
| active = "true" |
| base_url = "https://codey-lab-smollm2-customs.hf.space/v1" |
| env_key = "SMOLLM_API_KEY" |
| default_model = "smollm2-360m" |
| models = "smollm2-360m, codey-lab/model.universal-mcp-hub" |
| fallback_to = "gemini" |
| [LLM_PROVIDER.smollm_END] |
|
|
| |
|
|
| [LLM_PROVIDER.anthropic] |
| active = "true" |
| base_url = "https://api.anthropic.com/v1" |
| env_key = "ANTHROPIC_API_KEY" |
| api_version_header = "2023-06-01" |
| default_model = "claude-haiku-4-5-20251001" |
| models = "claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251001" |
| supports_cache = "true" |
| fallback_to = "gemini" |
| [LLM_PROVIDER.anthropic_END] |
|
|
| [LLM_PROVIDER.gemini] |
| active = "true" |
| base_url = "https://generativelanguage.googleapis.com/v1beta" |
| env_key = "GEMINI_API_KEY" |
| default_model = "gemini-2.5-flash" |
| models = "gemini-2.0-flash, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-3.1-flash-lite-preview, gemini-3-flash-preview, gemini-3.1-pro-preview" |
| supports_cache = "true" |
| fallback_to = "openrouter" |
| [LLM_PROVIDER.gemini_END] |
|
|
| [LLM_PROVIDER.openrouter] |
| active = "true" |
| base_url = "https://openrouter.ai/api/v1" |
| env_key = "OPENROUTER_API_KEY" |
| default_model = "nvidia/nemotron-nano-9b-v2:free" |
| models = "meta-llama/llama-3-8b-instruct, mistralai/mistral-7b-instruct, nvidia/nemotron-nano-9b-v2:free, google/gemma-3-27b-it:free, openai/gpt-oss-20b:free, mistralai/Mistral-7B-Instruct-v0.3, meta-llama/Llama-3.3-70B-Instruct" |
| fallback_to = "huggingface" |
| [LLM_PROVIDER.openrouter_END] |
|
|
| [LLM_PROVIDER.huggingface] |
| active = "true" |
| base_url = "https://api-inference.huggingface.co/v1" |
| env_key = "HF_TOKEN" |
| default_model = "Qwen/Qwen2.5-Coder-32B-Instruct" |
| models = "Qwen/Qwen2.5-Coder-32B-Instruct, meta-llama/Llama-3.1-8B-Instruct, mistralai/Mistral-Nemo-Instruct-2407, Qwen/Qwen2.5-72B-Instruct" |
| |
| fallback_to = "smollm" |
| [LLM_PROVIDER.huggingface_END] |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| [LLM_PROVIDERS_END] |
|
|
| |
| [SEARCH_PROVIDERS] |
|
|
| [SEARCH_PROVIDER.brave] |
| active = "true" |
| base_url = "https://api.search.brave.com/res/v1/web/search" |
| env_key = "BRAVE_API_KEY" |
| default_results = "5" |
| max_results = "20" |
| fallback_to = "tavily" |
| [SEARCH_PROVIDER.brave_END] |
|
|
| [SEARCH_PROVIDER.tavily] |
| active = "true" |
| base_url = "https://api.tavily.com/search" |
| env_key = "TAVILY_API_KEY" |
| default_results = "5" |
| max_results = "10" |
| include_answer = "true" |
| fallback_to = "" |
| [SEARCH_PROVIDER.tavily_END] |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| [SEARCH_PROVIDERS_END] |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
|
|
| |
|
|
| [PROVIDERS_END] |
|
|
| |
| |
| |
| |
| [MODELS] |
|
|
| [MODEL.claude-opus-4-6] |
| provider = "anthropic" |
| context_tokens = "200000" |
| max_output_tokens = "32000" |
| requests_per_min = "5" |
| requests_per_day = "300" |
| cost_input_per_1k = "0.015" |
| cost_output_per_1k = "0.075" |
| capabilities = "text, code, analysis, vision" |
| [MODEL.claude-opus-4-6_END] |
|
|
| [MODEL.claude-sonnet-4-6] |
| provider = "anthropic" |
| context_tokens = "200000" |
| max_output_tokens = "16000" |
| requests_per_min = "50" |
| requests_per_day = "1000" |
| cost_input_per_1k = "0.003" |
| cost_output_per_1k = "0.015" |
| capabilities = "text, code, analysis, vision" |
| [MODEL.claude-sonnet-4-6_END] |
|
|
| [MODEL.claude-haiku-4-5-20251001] |
| provider = "anthropic" |
| context_tokens = "200000" |
| max_output_tokens = "8000" |
| requests_per_min = "50" |
| requests_per_day = "2000" |
| cost_input_per_1k = "0.00025" |
| cost_output_per_1k = "0.00125" |
| capabilities = "text, code, fast" |
| [MODEL.claude-haiku-4-5-20251001_END] |
|
|
| [MODEL.gemini-3.1-flash-lite-preview] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "8192" |
| requests_per_min = "15" |
| requests_per_day = "1000" |
| cost_input_per_1k = "0.00010" |
| cost_output_per_1k = "0.00040" |
| capabilities = "text, code, vision, fast, cheap" |
| [MODEL.gemini-3.1-flash-lite-preview_END] |
|
|
| [MODEL.gemini-3-flash-preview] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "8192" |
| requests_per_min = "10" |
| requests_per_day = "1000" |
| cost_input_per_1k = "0.00050" |
| cost_output_per_1k = "0.00300" |
| capabilities = "text, code, vision, audio, frontier" |
| [MODEL.gemini-3-flash-preview_END] |
|
|
| [MODEL.gemini-3.1-pro-preview] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "64000" |
| requests_per_min = "5" |
| requests_per_day = "1000" |
| cost_input_per_1k = "0.00200" |
| cost_output_per_1k = "0.01200" |
| capabilities = "text, code, vision, audio, reasoning, agents" |
| [MODEL.gemini-3.1-pro-preview_END] |
|
|
| [MODEL.gemini-2.5-flash] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "8192" |
| requests_per_min = "15" |
| requests_per_day = "1500" |
| cost_input_per_1k = "0.00010" |
| cost_output_per_1k = "0.00040" |
| capabilities = "text, code, vision, audio" |
| [MODEL.gemini-2.5-flash_END] |
|
|
| [MODEL.gemini-2.5-flash-lite] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "8192" |
| requests_per_min = "15" |
| requests_per_day = "1500" |
| cost_input_per_1k = "0.00010" |
| cost_output_per_1k = "0.00040" |
| capabilities = "text, code, vision, audio" |
| [MODEL.gemini-2.0-flash-lite_END] |
|
|
|
|
| [MODEL.gemini-2.0-flash] |
| provider = "gemini" |
| context_tokens = "1000000" |
| max_output_tokens = "8192" |
| requests_per_min = "15" |
| requests_per_day = "1500" |
| cost_input_per_1k = "0.00010" |
| cost_output_per_1k = "0.00040" |
| capabilities = "text, code, vision, audio" |
| [MODEL.gemini-2.0-flash_END] |
|
|
| |
| [MODEL.mistral-7b-instruct] |
| provider = "openrouter" |
| context_tokens = "32000" |
| max_output_tokens = "4096" |
| requests_per_min = "60" |
| requests_per_day = "10000" |
| cost_input_per_1k = "0.00006" |
| cost_output_per_1k = "0.00006" |
| capabilities = "text, code, fast, cheap" |
| [MODEL.mistral-7b-instruct_END] |
| |
| [MODEL.dolphin-mistral-24b-venice-edition] |
| provider = "openrouter" |
| context_tokens = "32768" |
| max_output_tokens = "4096" |
| requests_per_min = "" |
| requests_per_day = "" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "uncensored, text, code, fast, very cheap" |
| [MODEL.dolphin-mistral-24b-venice-edition_END] |
|
|
| [MODEL.nvidia-nemotron-nano-9b-v2] |
| provider = "openrouter" |
| context_tokens = "131072" |
| max_output_tokens = "4096" |
| requests_per_min = "" |
| requests_per_day = "" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, code, reasoning, fast, free" |
| [MODEL.nvidia-nemotron-nano-9b-v2_END] |
|
|
| [MODEL.gemma-3-27b-it] |
| provider = "openrouter" |
| context_tokens = "131072" |
| max_output_tokens = "8192" |
| requests_per_min = "" |
| requests_per_day = "" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, code, vision, multilingual, free" |
| [MODEL.gemma-3-27b-it_END] |
|
|
| [MODEL.gpt-oss-20b] |
| provider = "openrouter" |
| context_tokens = "128000" |
| max_output_tokens = "4096" |
| requests_per_min = "" |
| requests_per_day = "" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, code, free" |
| [MODEL.gpt-oss-20b_END] |
|
|
| [MODEL.deephermes-3-llama-3-8b-preview] |
| provider = "openrouter" |
| context_tokens = "131072" |
| max_output_tokens = "4096" |
| requests_per_min = "" |
| requests_per_day = "" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, code, reasoning, uncensored, free" |
| [MODEL.deephermes-3-llama-3-8b-preview_END] |
|
|
| [MODEL.Mistral-7B-Instruct-v0.3] |
| provider = "openrouter" |
| context_tokens = "32768" |
| max_output_tokens = "4096" |
| requests_per_min = "60" |
| requests_per_day = "10000" |
| cost_input_per_1k = "0.00006" |
| cost_output_per_1k = "0.00006" |
| capabilities = "text, code, fast, cheap" |
| [MODEL.Mistral-7B-Instruct-v0.3_END] |
|
|
| [MODEL.Llama-3.3-70B-Instruct] |
| provider = "openrouter" |
| context_tokens = "131072" |
| max_output_tokens = "8192" |
| requests_per_min = "60" |
| requests_per_day = "10000" |
| cost_input_per_1k = "0.00012" |
| cost_output_per_1k = "0.00030" |
| capabilities = "text, code, reasoning, multilingual" |
| [MODEL.Llama-3.3-70B-Instruct_END] |
|
|
| |
| [MODEL.smollm2-360m] |
| provider = "smollm" |
| context_tokens = "8192" |
| max_output_tokens = "300" |
| requests_per_min = "60" |
| requests_per_day = "10000" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, assistant, navigation, free, local" |
| [MODEL.smollm2-360m_END] |
|
|
| [MODEL.codey-lab/model.universal-mcp-hub] |
| provider = "smollm" |
| context_tokens = "8192" |
| max_output_tokens = "300" |
| requests_per_min = "60" |
| requests_per_day = "10000" |
| cost_input_per_1k = "0.00000" |
| cost_output_per_1k = "0.00000" |
| capabilities = "text, assistant, navigation, free, custom, finetuned" |
| [MODEL.codey-lab/model.universal-mcp-hub_END] |
|
|
| [MODELS_END] |
|
|
| |
| |
| |
| |
| [TOOLS] |
|
|
| [TOOL.llm_complete] |
| active = "true" |
| description = "Send prompt to any configured LLM provider" |
| provider_type = "llm" |
| default_provider = "anthropic" |
| timeout_sec = "60" |
| system_prompt = "You are a helpful assistant integrated into the Universal MCP Hub. Answer concisely and only what is asked." |
| [TOOL.llm_complete_END] |
|
|
| [TOOL.code_review] |
| active = "true" |
| description = "Review code for bugs, security issues and improvements" |
| provider_type = "llm" |
| default_provider = "anthropic" |
| timeout_sec = "60" |
| system_prompt = "You are an expert code reviewer. Analyze the given code for bugs, security issues, and improvements. Be specific and concise." |
| [TOOL.code_review_END] |
|
|
| [TOOL.summarize] |
| active = "true" |
| description = "Summarize text into concise bullet points" |
| provider_type = "llm" |
| default_provider = "gemini" |
| timeout_sec = "30" |
| system_prompt = "You are a summarization expert. Summarize the given text in 3-5 bullet points. Be concise and accurate." |
| [TOOL.summarize_END] |
|
|
| [TOOL.translate] |
| active = "true" |
| description = "Translate text β auto-detects source language" |
| provider_type = "llm" |
| default_provider = "gemini" |
| timeout_sec = "30" |
| system_prompt = "You are a professional translator. Translate the given text accurately. Auto-detect the source language. Output only the translation, no explanation." |
| [TOOL.translate_END] |
|
|
| [TOOL.web_search] |
| active = "true" |
| description = "Search the web via configured search provider" |
| provider_type = "search" |
| default_provider = "brave" |
| timeout_sec = "30" |
| [TOOL.web_search_END] |
|
|
| [TOOL.db_query] |
| active = "true" |
| description = "Execute SELECT queries on connected database (read-only)" |
| provider_type = "db" |
| readonly = "true" |
| timeout_sec = "10" |
| [TOOL.db_query_END] |
|
|
| [TOOL.persist_result] |
| active = "true" |
| description = "Persist hub_state data to PostgreSQL for long-term storage" |
| provider_type = "persist" |
| state_read_key = "" |
| target_table = "hub_results" |
| timeout_sec = "10" |
| [TOOL.persist_result_END] |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| [TOOL.shellmaster] |
| active = "false" |
| shellmaster_agent_url = "http://localhost:5004" |
| shellmaster_token = "" |
| description = "AI-powered shell assistant β generates and executes safe shell commands" |
| provider_type = "llm" |
| default_provider = "smollm" |
| timeout_sec = "30" |
| shellmaster_commands_file = "shellmaster_commands.jsonl" |
| shellmaster_commands_dataset = "" |
| shellmaster_customs_model = "" |
| system_prompt = "You are ShellMaster. Generate safe shell commands for the requested task. Output ONLY valid JSON: {\"command\": \"cmd here\", \"backup\": \"backup cmd or empty\", \"recovery\": \"recovery cmd or empty\", \"risk\": \"low|medium|high\"}" |
| [TOOL.shellmaster_END] |
|
|
| [TOOL.shellmaster_confirm] |
| active = "false" |
| description = "Confirm and execute the last ShellMaster command β runs backup first" |
| [TOOL.shellmaster_confirm_END] |
|
|
| [TOOL.shellmaster_recover] |
| active = "false" |
| description = "Execute recovery plan for last ShellMaster command" |
| [TOOL.shellmaster_recover_END] |
|
|
| [TOOL.shellmaster_commands] |
| active = "false" |
| description = "List allowed ShellMaster commands from registry" |
| [TOOL.shellmaster_commands_END] |
|
|
| [TOOLS_END] |
|
|
| |
| |
| |
| |
| [DB_SYNC] |
| SQLITE_PATH = "app/.hub_state.db" |
| SYNC_INTERVAL_SEC = "30" |
| MAX_CACHE_ENTRIES = "1000" |
| [DB_SYNC_END] |
|
|
| |
| |
| |
| [DEBUG] |
| DEBUG = "ON" |
| DEBUG_LEVEL = "FULL" |
| LOG_FILE = "hub_debug.log" |
| LOG_REQUESTS = "true" |
| LOG_RESPONSES = "true" |
| [DEBUG_END] |
|
|
| |
| |
| |
| [PARSER_PROVIDER] |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| [PARSER_PROVIDER_END] |
|
|
|
|