Skip to main content

FastAPI MCP Client

A specialized client library specifically designed to work with fastapi-mcp servers that implement the Model Context Protocol (MCP) over Server-Sent Events (SSE). This library provides a seamless way to interact with MCP-enabled FastAPI services.

Installation

# Install with pip
pip install fastapi-mcp-client

# Or with UV
uv add fastapi-mcp-client

Quick Start

import asyncio
from fastapi_mcp_client import MCPClient

async def main():
    async with MCPClient("http://localhost:8000") as client:
        # Call a non-streaming operation
        result = await client.call_operation("echo", {"message": "Hello, MCP!"})
        print(f"Echo result: {result}")
        
        # Call a streaming operation with SSE
        stream = await client.call_operation(
            "generate_numbers", 
            {"count": 5},
            stream=True
        )
        
        async for event in stream:
            print(f"Event: {event}")

asyncio.run(main())

Features

  • MCP Protocol Support: Full implementation of the Model Context Protocol
  • SSE Streaming: First-class support for Server-Sent Events (SSE) streaming
  • Async-First Design: Fully async-compatible for high-performance applications
  • Seamless Session Management: Handles MCP session establishment and message passing
  • Error Handling: Comprehensive error handling with fallback mechanisms
  • Type Annotations: Full type hints for better IDE integration and validation

Running Examples

The repository includes examples to help you get started. Here's how to run them:

1. Clone the Repository

git clone https://github.com/RooseveltAdvisors/fastapi-mcp-client.git
cd fastapi-mcp-client

2. Set Up Environment

# Create and activate virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install all dependencies including examples
uv sync --all-extras

3. Start the Example Server

# In one terminal
cd examples/server
python simpler_server.py

This starts a FastAPI server with several MCP-enabled endpoints:

  • echo: Returns the message you send
  • generate_numbers: Streams a sequence of numbers
  • search_documents: Simulates a document search with streaming results
  • calculate: Evaluates a simple math expression

4. Run the SSE Client Example

# In another terminal (with virtual env activated)
cd examples
python sse_example.py

Advanced Usage

Custom Client Configuration

from fastapi_mcp_client import MCPClient, MCPClientConfig

config = MCPClientConfig(
    base_url="http://localhost:8000",
    timeout=60.0,
    log_level="DEBUG"
)

async with MCPClient("http://localhost:8000", config=config) as client:
    # Call a streaming tool with custom configuration
    stream = await client.call_operation(
        "generate_numbers", 
        {"count": 10},
        stream=True
    )
    
    async for event in stream:
        print(f"Received event: {event}")

Understanding the MCP/SSE Flow

sequenceDiagram
    participant C as Client
    participant S as Server

    Note over C,S: Establish SSE Connection
    C->>+S: GET /mcp (Accept: text/event-stream)
    S-->>-C: 200 OK (Connection Open)
    S-->>C: SSE: data: /mcp/messages/?session_id=XXX

    Note over C: Parse session_id=XXX

    Note over C,S: MCP Initialization
    C->>+S: POST /mcp/messages/?session_id=XXX <br> Payload: {method: "initialize", ...}
    S-->>-C: 202 Accepted

    Note over C,S: MCP Tool Call
    C->>+S: POST /mcp/messages/?session_id=XXX <br> Payload: {method: "tools/call", ...}
    S-->>-C: 202 Accepted

    Note over C,S: Stream Results
    S-->>C: SSE: data: {result_part_1}
    S-->>C: SSE: data: {result_part_2}
    S-->>C: SSE: data: {final_result}
    Note over S: (Closes SSE Connection or sends close event)

Examples

Check out the examples directory for more:

Contributing

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

Development Setup

  1. Clone the repository

    git clone https://github.com/RooseveltAdvisors/fastapi-mcp-client.git
    cd fastapi-mcp-client
    
  2. Install uv

    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  3. Create and activate a virtual environment

    uv venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  4. Install development dependencies

    uv sync --all-extras
    
  5. Run tests

    pytest
    

Pull Request Process

  1. Create your feature branch (git checkout -b feature/amazing-feature)
  2. Make your changes and ensure tests pass
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Built to work with FastAPI MCP - a FastAPI extension for adding MCP support to your APIs

Metadata

Release files for fastapi-mcp-client 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fastapi-mcp-client 0.4.0
File Size Uploaded Provenance
fastapi_mcp_client-0.4.0.tar.gz 81.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-mcp-client 0.4.0
File Interpreter ABI Platform
fastapi_mcp_client-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 93.5 kB

Release files / fastapi_mcp_client-0.4.0.tar.gz

Download URL fastapi_mcp_client-0.4.0.tar.gz
Size 81.7 kB
Tags Source
SHA-256 checksum
How to use checksums
6af245d7cc7227e2588788e65910de6b53bb49447131be5a6763b046c5613c3a
BLAKE2b-256 checksum
How to use checksums
c7eceeec860ab7b6de590dbd2bf81d0896d970f47ac10420533d15135818fa6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.7

Release files / fastapi_mcp_client-0.4.0-py3-none-any.whl

Download URL fastapi_mcp_client-0.4.0-py3-none-any.whl
Size 11.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
78dde7e38d0be5ad8d48c4b0bb28136288c21ba834382dd8519068cb1d22f5bb
BLAKE2b-256 checksum
How to use checksums
613e8fa81fc5049555c0d837ccabd679efca90acd0b3763811433b3d4821722c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.7

Security for fastapi-mcp-client 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page