This guide explains how to configure MCP providers for AxioLex and how to discover their tools into the searchable tool catalog.
MCP providers are external Model Context Protocol servers that expose tools. AxioLex stores provider connection details in source_files/mcp_providers.yaml, discovers tools from enabled providers, normalizes those tools, and caches searchable discovery/runtime metadata for retrieval and execution workflows.
The provider flow is:
mcp_providers.yaml
-> MCPDiscovery
-> provider tools/list discovery
-> normalized tool metadata
-> Redis discovery/runtime cache
-> BM25S retrieval and MCP tool routing
Use this page when you want to:
By default, AxioLex reads providers from:
source_files/mcp_providers.yaml
A provider entry looks like this:
providers:
- id: alphavantage_finance
name: Alpha Vantage MCP
transport: streamable-http
endpoint: https://mcp.alphavantage.co/mcp
command: null
args: []
auth:
type: api_key
secret_env: ALPHAVANTAGE_API_KEY
secret_value: null
enabled: true
features:
supports_streaming: true
limits:
max_page_size: 15
max_requests_per_minute: 60
max_results: 100
timeout_seconds: 10
| Field | Required | Description |
|---|---|---|
id |
Yes | Stable unique provider identifier. Used in API routes, cache keys, and normalized tool IDs. |
name |
Yes | Human-readable provider name shown in the UI. |
transport |
Yes | Provider transport. Supported discovery paths include http and streamable-http. |
endpoint |
For HTTP transports | MCP server endpoint URL. |
command |
For stdio-style configs | Command name if a provider is represented by a local process. |
args |
No | Command arguments for process-based providers. |
auth.type |
No | Authentication mode: none, api_key, or bearer. |
auth.secret_env |
For authenticated providers | Environment variable that contains the secret. |
auth.secret_value |
No | Serialized field; prefer environment variables instead of storing secrets in YAML. |
enabled |
No | Whether the provider participates in discovery. |
features.supports_streaming |
No | Indicates whether the provider supports streaming behavior. |
limits.max_page_size |
No | Provider-specific page size limit for discovery/adapters. |
limits.max_requests_per_minute |
No | Rate limit metadata for provider calls. |
limits.max_results |
No | Maximum result count metadata. |
limits.timeout_seconds |
No | Timeout metadata for provider operations. |
For providers that need credentials, store the secret in an environment variable and reference that variable with auth.secret_env.
export ALPHAVANTAGE_API_KEY="your-api-key"
auth:
type: api_key
secret_env: ALPHAVANTAGE_API_KEY
secret_value: null
For bearer-token providers:
auth:
type: bearer
secret_env: CUSTOM_MCP_TOKEN
secret_value: null
For unauthenticated providers:
auth:
type: none
secret_env: null
secret_value: null
Add a new provider under providers:
providers:
- id: local_markets
name: Local Markets MCP
transport: streamable-http
endpoint: http://localhost:9001/mcp
command: null
args: []
auth:
type: none
secret_env: null
secret_value: null
enabled: true
features:
supports_streaming: false
limits:
max_page_size: 50
max_requests_per_minute: 60
max_results: 100
timeout_seconds: 10
After editing the YAML file, discover tools from the provider through the UI or REST API.
Start the AxioLex service and open the web interface. In the MCP Providers tab you can:
curl -X GET http://localhost:9200/mcp-providers
curl -X POST http://localhost:9200/mcp-providers \
-H "Content-Type: application/json" \
-d '{
"id": "local_markets",
"name": "Local Markets MCP",
"transport": "streamable-http",
"endpoint": "http://localhost:9001/mcp",
"command": null,
"args": [],
"auth": {
"type": "none",
"secret_env": null,
"secret_value": null
},
"enabled": true,
"features": {
"supports_streaming": false
},
"limits": {
"max_page_size": 50,
"max_requests_per_minute": 60,
"max_results": 100,
"timeout_seconds": 10
}
}'
curl -X PUT http://localhost:9200/mcp-providers/local_markets \
-H "Content-Type: application/json" \
-d '{
"name": "Local Markets MCP",
"transport": "streamable-http",
"endpoint": "http://localhost:9001/mcp",
"command": null,
"args": [],
"auth": {
"type": "none",
"secret_env": null,
"secret_value": null
},
"enabled": true,
"features": {
"supports_streaming": false
},
"limits": {
"max_page_size": 50,
"max_requests_per_minute": 60,
"max_results": 100,
"timeout_seconds": 10
}
}'
curl -X DELETE http://localhost:9200/mcp-providers/local_markets
This sets enabled to false. If Redis is connected, AxioLex also invalidates cached tools for that provider and reloads the retriever index.
curl -X GET http://localhost:9200/mcp-providers/local_markets/discover
A successful response includes the normalized tool list and count:
{
"success": true,
"provider_id": "local_markets",
"tools": [],
"count": 0
}
When discovery succeeds, AxioLex separates tool data into two cache shapes:
id, title, description, tool_name, params, category, and provider.tool_name, params, transport, endpoint, provider ID, and auth metadata.This separation lets the MCP server retrieve and rank tools without mixing search text with runtime connection details.
The alphavantage_finance provider has a provider-specific adapter. Use ALPHAVANTAGE_API_KEY for authentication:
export ALPHAVANTAGE_API_KEY="your-alpha-vantage-key"
Example configuration:
- id: alphavantage_finance
name: Alpha Vantage MCP
transport: streamable-http
endpoint: https://mcp.alphavantage.co/mcp
command: null
args: []
auth:
type: api_key
secret_env: ALPHAVANTAGE_API_KEY
secret_value: null
enabled: true
features:
supports_streaming: true
limits:
max_page_size: 15
max_requests_per_minute: 60
max_results: 100
timeout_seconds: 10
providers key in source_files/mcp_providers.yaml.auth.secret_env is set before starting AxioLex.enabled: true or update the provider through the API/UI.