Skip to main content
Glama
bagasta

FastMCP Server

by bagasta

FastMCP Server

Production-ready Model Context Protocol server built on top of FastMCP. It exposes a set of demo tools (calculator, web search, web fetch) and ships with a Playground UI for interactive testing.

Features

  • ๐Ÿš€ Powered by FastMCP's high-level MCP abstractions

  • ๐Ÿ”ง Decorator-based tool registration with automatic schema generation

  • ๐Ÿงช Comprehensive pytest suite with in-memory FastMCP client tests

  • ๐Ÿ–ฅ๏ธ Web playground for exercising tools without writing a client

  • ๐Ÿงพ PDF generation from HTML/Markdown templates with pluggable rendering engines

  • โš™๏ธ Environment-driven configuration for tool toggles and timeouts

Related MCP server: MCP Server with OpenAI Integration

Quick Start

  1. Install dependencies

    pip install -r requirements.txt
  2. Configure environment

    cp .env.example .env
    # Edit .env to suit your environment
  3. Run the MCP server (choose either command)

    # Using Python directly
    python -m src.server
    
    # Or via the FastMCP CLI (adds uvicorn/stdio helpers)
    fastmcp run src/server.py
  4. Launch the Playground UI (optional)

    python start_playground.py
    # Open http://localhost:8080

LangChain SSE Verification

export MCP_BEARER_TOKEN=jango
fastmcp run src/server.py --transport sse --host 0.0.0.0 --port 8080

In another terminal:

# Stream the MCP handshake and keep-alive frames
curl -N -H "Authorization: Bearer jango" http://localhost:8080/mcp/stream | head

# Invoke the calculator tool over HTTP
curl -X POST http://localhost:8080/tools/calculator/call \
  -H "Authorization: Bearer jango" \
  -H "Content-Type: application/json" \
  -d '{"arguments":{"expression":"6*7"}}'

The SSE stream should emit data: {...} frames for the initialize result, the tools/list payload, and periodic ping messages. The calculator call should return JSON containing "result": "42".

Adding New Tools

Tools are plain Python functions decorated with @mcp.tool. Schemas are inferred from type hints and default values.

# src/server.py
from fastmcp import Context
from src.server import mcp

@mcp.tool(name="greet", description="Return a friendly greeting")
def greet(name: str, excited: bool = False) -> str:
    message = f"Hello, {name}!"
    return message.upper() if excited else message

Set MCP_ENABLED_TOOLS_CONFIG in .env to control which tools are registered at import time.

PDF Generation Tool

The pdf.generate tool renders PDF documents from HTML or Markdown templates:

  • Provide a template string and optional variables (dict or JSON string) for templating via Jinja2.

  • Pick content_type="markdown" to auto-convert Markdown into HTML before rendering.

  • Choose a rendering engine with the engine parameter:

    • weasyprint (default) โ€” install with pip install weasyprint and ensure Cairo/Pango system libraries are available.

    • wkhtmltopdf โ€” install with pip install pdfkit and the wkhtmltopdf binary on your PATH.

  • Set output_format="base64" to receive the PDF bytes inline, or "path" with output_path to write to disk (defaults to playground/generated_pdfs/).

Markdown support relies on the markdown package (pip install markdown). If an engine dependency is missing, the tool returns a helpful error message instead of failing silently.

Testing

pytest tests/

Documentation

  • how-to-use.md โ€” end-to-end usage guide

  • docs/ โ€” extended documentation on configuration, deployment, testing, and the playground

F
license - not found
-
quality - not tested
D
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/bagasta/mcp-server'

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