Skip to main content
Glama
ilyoungkim

FastAPI MCP-Style Server

by ilyoungkim

FastAPI MCP-Style Server

Minimal FastAPI implementation that mimics a subset of Model Context Protocol (MCP) functionality.

Features

  • Echo-style POST /mcp endpoint returning structured response (id, status, outputs)

  • JSON-RPC 2.0 endpoint /mcp/rpc supporting:

    • mcp.list_tools

    • mcp.call_tool (tools: echo, uppercase, query_manse, calc_daewoon)

  • GET usage helper /mcp

  • Pydantic models for request/response

  • Basic logging

  • Tests (pytest) for REST + RPC

Related MCP server: JSON-RPC

Quick Start

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload

REST Usage

curl -X POST http://127.0.0.1:8000/mcp \
  -H 'Content-Type: application/json' \
  -d '{"inputs": {"text": "hello"}}'

JSON-RPC Examples

List tools:

curl -X POST http://127.0.0.1:8000/mcp/rpc \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"mcp.list_tools"}'

Call echo:

curl -X POST http://127.0.0.1:8000/mcp/rpc \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":"abc","method":"mcp.call_tool","params":{"name":"echo","arguments":{"text":"hello"}}}'

Call query_manse (first 5 rows):

curl -X POST http://127.0.0.1:8000/mcp/rpc \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"mcp.call_tool","params":{"name":"query_manse","arguments":{"limit":5}}}'

Call calc_daewoon (example date):

curl -X POST http://127.0.0.1:8000/mcp/rpc \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"mcp.call_tool","params":{"name":"calc_daewoon","arguments":{"yyyymmdd":"20250115"}}}'

Response example:

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "outputs": [
      {"type": "json", "content": {"asc_diff_days": 3, "desc_diff_days": 2}}
    ]
  }
}

Meaning:

  • asc_diff_days: 기준일 이후 다음 절기까지 (일수 / 3 반올림)

  • desc_diff_days: 기준일 이전 직전 절기까지 (일수 / 3 반올림)

  • 없으면 null

Environment Variables (DB)

Variable

Default

Description

MCP_DB_HOST

192.168.31.136

MariaDB host

MCP_DB_PORT

3306

MariaDB port

MCP_DB_USER

DB user

MCP_DB_PASSWORD

DB password

MCP_DB_NAME

manse

Database name

Example run with overrides:

MCP_DB_HOST=127.0.0.1 MCP_DB_USER=app MCP_DB_PASSWORD=secret uvicorn main:app --reload

Run Tests

pytest -q

Next Ideas

  • Streaming (SSE) outputs

  • Prompts/resources primitives

  • Auth layer (OAuth / API key)

  • Tool change events

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A minimal Model Context Protocol server built with FastAPI that provides a basic "Hello World" resource and tool. Serves as a starting point for building and validating MCP client integrations with richer resources and tools.
    -
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server based on OpenRPC, providing JSON-RPC function invocation and method discovery services.
    2
    1
    Apache 2.0
  • F
    license
    B
    quality
    D
    maintenance
    A demonstration server that implements JSON-RPC 2.0 methods for basic arithmetic using FastAPI. It provides integration examples for the Model Context Protocol (MCP) using FastMCP to connect with Claude Desktop.
    1
    -