Skip to main content
Glama
gwbischof
by gwbischof

Outsource MCP

An MCP (Model Context Protocol) server that enables AI applications to outsource tasks to various model providers through a unified interface.

Compatible with any AI tool that supports the Model Context Protocol, including Claude Desktop, Cline, and other MCP-enabled applications. Built with FastMCP for the MCP server implementation and Agno for AI agent capabilities.

Features

  • 🤖 Multi-Provider Support: Access 20+ AI providers through a single interface

  • 📝 Text Generation: Generate text using models from OpenAI, Anthropic, Google, and more

  • 🎨 Image Generation: Create images using DALL-E 3 and DALL-E 2

  • 🔧 Simple API: Consistent interface with just three parameters: provider, model, and prompt

  • 🔑 Flexible Authentication: Only configure API keys for the providers you use

Related MCP server: Model Hub MCP

Configuration

Add the following configuration to your MCP client. Consult your MCP client's documentation for specific configuration details.

{
  "mcpServers": {
    "outsource-mcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/gwbischof/outsource-mcp.git", "outsource-mcp"],
      "env": {
        "OPENAI_API_KEY": "your-openai-key",
        "ANTHROPIC_API_KEY": "your-anthropic-key",
        "GOOGLE_API_KEY": "your-google-key",
        "GROQ_API_KEY": "your-groq-key",
        "DEEPSEEK_API_KEY": "your-deepseek-key",
        "XAI_API_KEY": "your-xai-key",
        "PERPLEXITY_API_KEY": "your-perplexity-key",
        "COHERE_API_KEY": "your-cohere-key",
        "FIREWORKS_API_KEY": "your-fireworks-key",
        "HUGGINGFACE_API_KEY": "your-huggingface-key",
        "MISTRAL_API_KEY": "your-mistral-key",
        "NVIDIA_API_KEY": "your-nvidia-key",
        "OLLAMA_HOST": "http://localhost:11434",
        "OPENROUTER_API_KEY": "your-openrouter-key",
        "TOGETHER_API_KEY": "your-together-key",
        "CEREBRAS_API_KEY": "your-cerebras-key",
        "DEEPINFRA_API_KEY": "your-deepinfra-key",
        "SAMBANOVA_API_KEY": "your-sambanova-key"
      }
    }
  }
}

Note: The environment variables are optional. Only include the API keys for the providers you want to use.

Quick Start

Once installed and configured, you can use the tools in your MCP client:

  1. Generate text: Use the outsource_text tool with provider "openai", model "gpt-4o-mini", and prompt "Write a haiku about coding"

  2. Generate images: Use the outsource_image tool with provider "openai", model "dall-e-3", and prompt "A futuristic city skyline at sunset"

Tools

outsource_text

Creates an Agno agent with a specified provider and model to generate text responses.

Arguments:

  • provider: The provider name (e.g., "openai", "anthropic", "google", "groq", etc.)

  • model: The model name (e.g., "gpt-4o", "claude-3-5-sonnet-20241022", "gemini-2.0-flash-exp")

  • prompt: The text prompt to send to the model

outsource_image

Generates images using AI models.

Arguments:

  • provider: The provider name (currently only "openai" is supported)

  • model: The model name ("dall-e-3" or "dall-e-2")

  • prompt: The image generation prompt

Returns the URL of the generated image.

Note: Image generation is currently only supported by OpenAI models (DALL-E 2 and DALL-E 3). Other providers only support text generation.

Supported Providers

The following providers are supported. Use the provider name (in parentheses) as the provider argument:

Core Providers

  • OpenAI (openai) - GPT-4, GPT-3.5, DALL-E, etc. | Models

  • Anthropic (anthropic) - Claude 3.5, Claude 3, etc. | Models

  • Google (google) - Gemini Pro, Gemini Flash, etc. | Models

  • Groq (groq) - Llama 3, Mixtral, etc. | Models

  • DeepSeek (deepseek) - DeepSeek Chat & Coder | Models

  • xAI (xai) - Grok models | Models

  • Perplexity (perplexity) - Sonar models | Models

Additional Providers

  • Cohere (cohere) - Command models | Models

  • Mistral AI (mistral) - Mistral Large, Medium, Small | Models

  • NVIDIA (nvidia) - Various models | Models

  • HuggingFace (huggingface) - Open source models | Models

  • Ollama (ollama) - Local models | Models

  • Fireworks AI (fireworks) - Fast inference | Models

  • OpenRouter (openrouter) - Multi-provider access | Models

  • Together AI (together) - Open source models | Models

  • Cerebras (cerebras) - Fast inference | Models

  • DeepInfra (deepinfra) - Optimized models | Models

  • SambaNova (sambanova) - Enterprise models | Models

Enterprise Providers

  • AWS Bedrock (aws or bedrock) - AWS-hosted models | Models

  • Azure AI (azure) - Azure-hosted models | Models

  • IBM WatsonX (ibm or watsonx) - IBM models | Models

  • LiteLLM (litellm) - Universal interface | Models

  • Vercel v0 (vercel or v0) - Vercel AI | Models

  • Meta Llama (meta) - Direct Meta access | Models

Environment Variables

Each provider requires its corresponding API key:

Provider

Environment Variable

Example

OpenAI

OPENAI_API_KEY

sk-...

Anthropic

ANTHROPIC_API_KEY

sk-ant-...

Google

GOOGLE_API_KEY

AIza...

Groq

GROQ_API_KEY

gsk_...

DeepSeek

DEEPSEEK_API_KEY

sk-...

xAI

XAI_API_KEY

xai-...

Perplexity

PERPLEXITY_API_KEY

pplx-...

Cohere

COHERE_API_KEY

...

Fireworks

FIREWORKS_API_KEY

...

HuggingFace

HUGGINGFACE_API_KEY

hf_...

Mistral

MISTRAL_API_KEY

...

NVIDIA

NVIDIA_API_KEY

nvapi-...

Ollama

OLLAMA_HOST

http://localhost:11434

OpenRouter

OPENROUTER_API_KEY

...

Together

TOGETHER_API_KEY

...

Cerebras

CEREBRAS_API_KEY

...

DeepInfra

DEEPINFRA_API_KEY

...

SambaNova

SAMBANOVA_API_KEY

...

AWS Bedrock

AWS credentials

Via AWS CLI/SDK

Azure AI

Azure credentials

Via Azure CLI/SDK

IBM WatsonX

IBM_WATSONX_API_KEY

...

Meta Llama

LLAMA_API_KEY

...

Note: Only configure the API keys for providers you plan to use.

Examples

Text Generation

# Using OpenAI
provider: openai
model: gpt-4o-mini
prompt: Write a haiku about coding

# Using Anthropic
provider: anthropic
model: claude-3-5-sonnet-20241022
prompt: Explain quantum computing in simple terms

# Using Google
provider: google
model: gemini-2.0-flash-exp
prompt: Create a recipe for chocolate chip cookies

Image Generation

# Using DALL-E 3
provider: openai
model: dall-e-3
prompt: A serene Japanese garden with cherry blossoms

# Using DALL-E 2
provider: openai
model: dall-e-2
prompt: A futuristic cityscape at sunset

Development

Prerequisites

  • Python 3.11 or higher

  • uv package manager

Setup

git clone https://github.com/gwbischof/outsource-mcp.git
cd outsource-mcp
uv sync

Testing with MCP Inspector

The MCP Inspector allows you to test the server interactively:

mcp dev server.py

Running Tests

The test suite includes integration tests that verify both text and image generation:

# Run all tests
uv run pytest

Note: Integration tests require API keys to be set in your environment.

Troubleshooting

Common Issues

  1. "Error: Unknown provider"

    • Check that you're using a supported provider name from the list above

    • Provider names are case-insensitive

  2. "Error: OpenAI API error"

    • Verify your API key is correctly set in the environment variables

    • Check that your API key has access to the requested model

    • Ensure you have sufficient credits/quota

  3. "Error: No image was generated"

    • This can happen if the image generation request fails

    • Try a simpler prompt or different model (dall-e-2 vs dall-e-3)

  4. Environment variables not working

    • Make sure to restart your MCP client after updating the configuration

    • Verify the configuration file location for your specific MCP client

    • Check that the environment variables are properly formatted in the configuration

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

2 tools
outsource_imageA
Delegate image generation to an external AI model. Use this when you need to create
visual content.

Args:
    provider: The AI provider to use (currently only "openai" is supported)
    model: The image model to use ("dall-e-3" for high quality, "dall-e-2" for faster/cheaper)
    prompt: A detailed description of the image you want to generate

Returns:
    The URL of the generated image, which can be shared with users or used in responses

Example usage:
    For high-quality images: provider="openai", model="dall-e-3", prompt="A photorealistic rendering of..."
    For quick concepts: provider="openai", model="dall-e-2", prompt="A simple sketch showing..."

Note: Only OpenAI currently supports image generation. Other providers will return an error.
ParametersJSON Schema
NameRequiredDescriptionDefault
providerYes
modelYes
promptYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: provider limitations ('currently only "openai" is supported'), model-specific guidance, error conditions ('Other providers will return an error'), and return format ('URL of the generated image'). It doesn't mention rate limits, costs, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (Args, Returns, Example usage, Note), front-loaded purpose statement, and every sentence adds value. No redundant information or wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with no annotations and no output schema, the description provides substantial context: purpose, parameters, return format, examples, and limitations. It could potentially mention authentication requirements or rate limits, but covers the essential operational aspects well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining all three parameters: provider (with current limitation), model (with quality/speed tradeoffs), and prompt (with guidance on detail). The example usage provides concrete parameter value guidance beyond what the bare schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'delegate image generation' and resource 'to an external AI model', with specific purpose 'create visual content'. It distinguishes from sibling 'outsource_text' by focusing on images rather than text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context 'when you need to create visual content' and distinguishes from text generation via sibling tool name. However, it doesn't explicitly state when NOT to use this tool or mention alternative approaches beyond the sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

outsource_textA
Delegate text generation to another AI model. Use this when you need capabilities
or perspectives from a different model than yourself.

Args:
    provider: The AI provider to use (e.g., "openai", "anthropic", "google", "groq")
    model: The specific model identifier (e.g., "gpt-4o", "claude-3-5-sonnet-20241022", "gemini-2.0-flash-exp")
    prompt: The instruction or query to send to the external model

Returns:
    The text response from the external model, or an error message if the request fails

Example usage:
    To get a different perspective: provider="anthropic", model="claude-3-5-sonnet-20241022", prompt="Analyze this problem from a different angle..."
    To leverage specialized models: provider="deepseek", model="deepseek-coder", prompt="Write optimized Python code for..."
ParametersJSON Schema
NameRequiredDescriptionDefault
providerYes
modelYes
promptYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it delegates to external models, returns text responses or error messages, and implies it's a read-only operation (no destructive effects mentioned). However, it doesn't cover rate limits, authentication needs, or detailed error handling beyond 'if the request fails,' leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose and usage guidelines. Each sentence adds value, such as parameter explanations and examples, with no wasted words. The structure is logical and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (delegation to external AI models) and lack of annotations and output schema, the description is mostly complete. It covers purpose, usage, parameters, and returns, but could benefit from more details on error types or operational constraints. However, it's sufficient for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds significant meaning beyond the input schema by explaining each parameter's purpose with examples: 'provider' specifies AI providers like 'openai', 'model' is the specific identifier, and 'prompt' is the instruction to send. This fully compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs and resources: 'Delegate text generation to another AI model.' It distinguishes from the sibling tool 'outsource_image' by specifying 'text generation' versus image-related tasks. The purpose is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Use this when you need capabilities or perspectives from a different model than yourself.' It provides clear context for usage, including example scenarios like getting different perspectives or leveraging specialized models, without misleading guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updates
    • First observedoutsource_image
    • First observedoutsource_text

TDQS

A4.3/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one handles image generation while the other handles text generation. Their descriptions explicitly differentiate when to use each tool, with no overlap in functionality or ambiguity about which tool to select for a given task.

Naming Consistency5/5

Both tools follow a consistent 'outsource_<resource>' naming pattern, using snake_case throughout. The naming convention is predictable and clearly indicates the type of content being outsourced (image vs text).

Tool Count2/5

With only 2 tools, this server feels thin for its apparent scope of 'outsourcing' AI tasks. While the two tools cover image and text generation, the server name suggests broader outsourcing capabilities that aren't represented in the tool surface, such as audio generation, video processing, or other AI services.

Completeness2/5

For a server named 'Outsource MCP', the tool surface is severely incomplete. It only covers image and text generation, missing obvious outsourcing capabilities like audio generation, video processing, code execution, data analysis, or other AI services that would logically fall under an outsourcing umbrella. The domain implied by the server name is much broader than what's actually covered.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gwbischof/outsource-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server