Skip to main content

MCP server for dynamic AI model switching in ai-lib ecosystem

Project description

MCP Model Switcher for ai-lib Ecosystem

Python 3.10+ License

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 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_key in 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 ID
  • filter_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 credentials
  • expected_env_vars: accepted environment variable names
  • hint: actionable setup instruction

Typical setup flow:

  1. Configure provider key in your MCP server process environment.
  2. Restart the MCP server process if your client does not support hot env reload.
  3. Call switch_model.
  4. 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_epoch increases.

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

License

This project is licensed under either of:

at your option.

Contributing

Contributions are welcome! Please ensure:

  1. Code follows PEP 8 and passes ruff check
  2. Type hints pass mypy --strict
  3. Tests are included for new features
  4. Documentation is updated

ai-mcp-model-switcher - Where MCP meets ai-lib. 🤖🔀

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_mcp_model_switcher-0.2.0.tar.gz (41.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_mcp_model_switcher-0.2.0-py3-none-any.whl (29.5 kB view details)

Uploaded Python 3

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

Hashes for ai_mcp_model_switcher-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b430be3a89371d06168474068fbe93bd2fe6aeed0d008522c912c303fb6b3b63
MD5 96bc8e90bfee7c10165c6bdde4237dbe
BLAKE2b-256 19255712d983e074eadea9e6d8b41ac569bfa90bfa350fa480aea045efc4cfbe

See more details on using hashes here.

File details

Details for the file ai_mcp_model_switcher-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ai_mcp_model_switcher-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a121edd7fb5ede446163194bd97e37d8e0b781e9e53c25870522b240666b8268
MD5 2c005525b55c896b9edb4c2aad307f10
BLAKE2b-256 672afb924a922399cb7ced928ae1d2e52a1df8ed4a2bc365c4d817ad0bd4aae3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page