MCP server for dynamic AI model switching in ai-lib ecosystem
Project description
MCP Model Switcher for ai-lib Ecosystem
MCP (Model Context Protocol) server that enables agents to dynamically switch AI models from the ai-lib ecosystem.
Features
- Protocol-Driven: All model configurations loaded from ai-protocol manifests (ARCH-001)
- Multi-Provider Support: Switch between OpenAI, Anthropic, Google, DeepSeek, and more
- Runtime-Agnostic: Uses ai-lib-python SDK for unified model interaction
- MCP-Compliant: Implements standard MCP tools over stdio transport
- Capability Discovery: Query available models and their capabilities
Quick Start
Installation
# Clone the repository
git clone https://github.com/yourorg/ai-mcp-model-switcher.git
cd ai-mcp-model-switcher
# Install dependencies
pip install -e .
Environment Setup
Set up your API keys:
export OPENAI_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export GOOGLE_API_KEY="..."
Recommended provider key mapping:
| Provider | Environment Variable |
|---|---|
| openai | OPENAI_API_KEY |
| anthropic | ANTHROPIC_API_KEY |
GOOGLE_API_KEY or GEMINI_API_KEY |
|
| deepseek | DEEPSEEK_API_KEY |
| cohere | COHERE_API_KEY |
| mistral | MISTRAL_API_KEY |
Security note:
- Prefer environment variables over passing
api_keyin tool arguments. - The server redacts sensitive fields in logs, but passing secrets in arguments still increases exposure risk in client traces.
Configuration
Add to your MCP client configuration (e.g., Cursor, Claude Desktop):
{
"mcpServers": {
"ai-model-switcher": {
"command": "python",
"args": ["-m", "ai_mcp_model_switcher.server"],
"env": {
"AI_PROTOCOL_PATH": "/path/to/ai-protocol"
}
}
}
}
Usage
In your agent, call MCP tools:
# List available models
models = await mcp_client.call_tool("list_models", {})
# Switch to Claude 3.5 Sonnet
await mcp_client.call_tool(
"switch_model",
{"model": "anthropic/claude-3-5-sonnet"}
)
# Check current status
status = await mcp_client.call_tool("get_status", {})
Available MCP Tools
1. switch_model
Switches to a different AI model/provider.
Parameters:
model(string, required): Model identifier (e.g.,openai/gpt-4o,anthropic/claude-3-5-sonnet)api_key(string, optional): Explicit API key (overrides environment variable; not recommended for production)base_url(string, optional): Custom base URL for testing/mock
Returns:
{
"status": "success",
"current_provider": "anthropic",
"current_model": "claude-3-5-sonnet",
"capabilities": ["streaming", "tools", "vision"]
}
2. list_models
Lists all available models from registered providers.
Parameters:
filter_provider(string, optional): Filter by provider IDfilter_capability(string, optional): Filter by capability (streaming,tools,vision,embeddings)
Returns:
{
"models": [
{
"id": "openai/gpt-4o",
"provider": "openai",
"capabilities": ["streaming", "tools", "vision"]
},
{
"id": "anthropic/claude-3-5-sonnet",
"provider": "anthropic",
"capabilities": ["streaming", "tools", "vision"]
}
]
}
3. get_status
Gets current model status and configuration.
Returns:
{
"provider": "anthropic",
"model": "claude-3-5-sonnet",
"capabilities": ["streaming", "tools", "vision"],
"is_configured": true,
"connection_epoch": 3,
"last_switched_at": "2026-03-02T09:00:00+00:00"
}
API Key Guidance and Troubleshooting
When switch_model fails due to missing credentials, the response includes:
provider: which provider is missing credentialsexpected_env_vars: accepted environment variable nameshint: actionable setup instruction
Typical setup flow:
- Configure provider key in your MCP server process environment.
- Restart the MCP server process if your client does not support hot env reload.
- Call
switch_model. - Verify with
get_status.
Connection Coordination with Agent Runtime
This MCP server manages model client lifecycle internally. To avoid conflicts with an agent's own connection manager:
- Treat MCP switcher as the control plane for model selection.
- Let the agent side observe
get_status.connection_epoch. - Rebuild agent-side cached sessions only when
connection_epochincreases.
This pattern prevents stale session reuse after model switches and supports deterministic synchronization.
Architecture
ai-mcp-model-switcher/
├── src/
│ ├── server.py # MCP server main entry point
│ ├── tools/ # MCP tool implementations
│ │ ├── switch.py # switch_model tool
│ │ ├── list.py # list_models tool
│ │ └── status.py # get_status tool
│ ├── runtime/ # Runtime abstraction layer
│ │ ├── base.py # Base runtime interface
│ │ ├── python_runtime.py # ai-lib-python implementation
│ │ └── loader.py # ProtocolLoader wrapper
│ └── state.py # State management
├── tests/ # Test suite
└── pyproject.toml # Project configuration
Development
Running Tests
# Install test dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=src/ai_mcp_model_switcher
Testing with Mock Server
Use ai-protocol-mock:
# Start mock server
docker-compose up -d ai-protocol-mock
# Run with mock
MOCK_HTTP_URL=http://localhost:4010 python -m ai_mcp_model_switcher.server
Code Style
# Format code
ruff format src tests
# Lint
ruff check src tests
# Type check
mypy src
Protocol-Driven Design (ARCH-001)
This server follows the ai-lib design principle:
一切逻辑皆算子,一切配置皆协议
All provider configurations are loaded from ai-protocol manifests. No provider-specific logic is hardcoded. Adding a new provider requires only a manifest file in ai-protocol.
Related Projects
- ai-protocol - Protocol specification
- ai-lib-python - Python runtime SDK
- ai-lib-rust - Rust runtime SDK
- ai-lib-ts - TypeScript runtime SDK
License
This project is licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contributing
Contributions are welcome! Please ensure:
- Code follows PEP 8 and passes
ruff check - Type hints pass
mypy --strict - Tests are included for new features
- Documentation is updated
ai-mcp-model-switcher - Where MCP meets ai-lib. 🤖🔀
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_mcp_model_switcher-0.2.0.tar.gz.
File metadata
- Download URL: ai_mcp_model_switcher-0.2.0.tar.gz
- Upload date:
- Size: 41.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b430be3a89371d06168474068fbe93bd2fe6aeed0d008522c912c303fb6b3b63
|
|
| MD5 |
96bc8e90bfee7c10165c6bdde4237dbe
|
|
| BLAKE2b-256 |
19255712d983e074eadea9e6d8b41ac569bfa90bfa350fa480aea045efc4cfbe
|
File details
Details for the file ai_mcp_model_switcher-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ai_mcp_model_switcher-0.2.0-py3-none-any.whl
- Upload date:
- Size: 29.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a121edd7fb5ede446163194bd97e37d8e0b781e9e53c25870522b240666b8268
|
|
| MD5 |
2c005525b55c896b9edb4c2aad307f10
|
|
| BLAKE2b-256 |
672afb924a922399cb7ced928ae1d2e52a1df8ed4a2bc365c4d817ad0bd4aae3
|